
findコマンドを使用してファイルを検索し、検索を処理する方法にはいくつかの問題があります。
現在、バックアップ-20151219.zip、バックアップ-20151220.zip、バックアップ-20151221.zipファイルを含む/ tmpディレクトリにあるとします。
その後、私の検索コマンドは次のようになります。
[root@server tmp]# find /tmp -type f -mtime +2 -name backup* -exec rm -f {} \;
次のメッセージが表示されます。
find: paths must precede expression: backup-20151219.zip
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
これは、backup *正規表現と一致し、結果をフィルタリングするのではなく検索パターンとして使用するためです。わかりました。
backup*で始まるファイルが含まれていない別のディレクトリに変更すると、期待した結果が表示されます。
だから私はワイルドカードを使用して一致を含む可能性があるディレクトリからファイルを検索し、それを結果として表示する方法があるかどうか疑問に思いました。
答え1
簡単に言えば、はい、方法があります。何とかワイルドカードを脱出する必要があります。これを行う方法はいくつかあります。私が最もよく使う方法は、特定のワイルドカード文字をエスケープすることです。
find . -name backup\* -print
または単にパターンを参照してください。
find . -name "backup*" -print
他のアプローチも同様にうまく機能します。要点は、シェルがワイルドカードをグローバル式として扱うのを防ぐことです。