何を検索しているのかを示す述語が欠けているだけです(例:)-name
。
名前でホームディレクトリを検索するには:
find ~ -name \*.pdf
ワイルドカード*
はエスケープする必要があるので、findがワイルドカードを取得する前にシェルが解釈しないように注意してください。'*.pdf'
および"*.pdf"
を使用すると、と同じ効果があり\*.pdf
ます。
大文字と小文字を区別せずに検索するには:
find ~ -iname \*.pdf
結果のみをファイルにプルーニングするには(名前式はおそらくこれを処理しますが、奇妙な名前のディレクトリがある場合に備えて):
find ~ -type f -iname \*.pdf
findがシンボリックリンクに従っていることを確認するには(通常、検索時に自分で行います):
find ~ -follow -type f -iname \*.pdf
見つけたファイルを使って何かを行うには:stdoutリダイレクションを使用してこれをファイルにダンプ(たとえば> filename
、最後に-exec
追加)するか、オプションを使用してコマンドを実行します(詳細はmanページを参照)。ただし、後者は各ファイルに対して一度にコマンドを実行します。多くの場合、xargs
コマンドに、見つかったファイルを引数として別のコマンドにすべて一度に渡すか、一度に大きなチャンクを渡す方が高速です。たとえば、ヘッダーファイルを介したアドホック(ただしインデックス付けされていない)grepsの場合:
find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"
そして最後の1つの拡張子は、ファイルとディレクトリにスペースが含まれている場合に、最後のコマンドが正しく機能するようにするためです。
find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"
find
は、役に立たないことはありません。