find は、ファイルシステム内のオブジェクトを簡単な条件メカニズムに基づいて再帰的にフィルタリングするためのコマンドです。 ファイルシステム上のファイルやディレクトリを検索するには find を使用する。 -exec フラグを使用すると、同じコマンドでファイルを検索し、すぐに処理することができる。

- Find Linux Files by Name or Extension
- Common Linux Find Commands and Syntax
- 検索コマンドを使用して現在のディレクトリ内のファイルを見つける
- Find Image Files in Linux Using the Command Line
- コマンドラインを使用してディレクトリ内の空のファイルを検索する
- Options and Optimizations for Finding Files in Linux Using the Command Line
- コマンドラインを使ってLinuxでファイルを修正時刻で検索
- Use Grep to Find Files in Linux Using the Command Line
- Process and Find Files Using the Find Command in Linux
- How to Find and Delete Files Using the Linux Command Line
Find Linux Files by Name or Extension
名前や拡張子によって特定のファイルの場所を見つけるのにコマンドラインから find を使用します。 次の例は、/home/username/ ディレクトリとすべてのサブディレクトリにある *.err ファイルを検索します:
find /home/username/ -name "*.err"
コンソールに同様の出力が表示されます:
/home/username/example.errThe matching file in the /home/username/ directory is "example.err"
Common Linux Find Commands and Syntax
通常 find コマンドは次の形式を取ります:
find options starting/path expression
options属性によりfindプロセスの動作および最適化方法を制御することが可能です。-
starting/path属性は、findがフィルタリングを開始するトップレベルのディレクトリを定義します。 -
expression属性は、出力を生成するためにディレクトリ階層を検索するテストを制御します。 パスを省略すると、ディスク全体からファイルを検索します。 例えば、/home/usernameディレクトリにあるexample.errという名前のファイルを次のコマンドで見つけることができます:find -name example.err同様の出力が得られるでしょう:
./username/example.err検索コマンドを使用して現在のディレクトリ内のファイルを見つける
例のディレクトリ構造とファイルを見てみましょう。 これらは、このガイドの例を通して参照されます。
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.errdirectory_1にいて、ディレクトリまたはそのサブディレクトリの中からファイルexample.errを見つけたい場合、次のコマンドを発行できます:find . -name example.err出力は次のようになります:
./example.err./directory_1/example.err出力は
directory_1ディレクトリ構造を反映したものになっています。├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.errFind Image Files in Linux Using the Command Line
前のセクションのファイル構造を参照すると、ディレクトリ構造のルート (
/) に位置するimage01.pngという名前のイメージが存在することがわかります。ファイル
image01.pngを見つけるために、/ディレクトリ内に格納されているすべての.pngファイルを検索する次のfindコマンドを実行します:find -name *.png同様の出力が表示されます:
./image01.pngイメージファイルのタイプを変更し、ルートディレクトリ (
/) 内の.jpgファイルを探してください:find -name *.jpgこの例のように出力します。
./web_files/unnamed.jpgコマンドラインを使用してディレクトリ内の空のファイルを検索する
コマンドラインを使用してディレクトリ内の空のファイルを検索するには、次のコマンドを実行します:
find . -type f -empty何も出力されない場合は、現在のディレクトリ内に空のファイルは存在しません。
Options and Optimizations for Finding Files in Linux Using the Command Line
findのデフォルト設定では、シンボリックリンクは無視されます。 もしfindがシンボリックリンクを追跡して返すようにしたい場合は、以下のようにコマンドに-Lオプションを追加する:find -O3 -L /var/www/ -name "*.html"このコマンドは最大最適化レベル (
-O3) とfindがシンボリックリンク (-L) を追跡できるようにするものである。findは/var/www/の下のディレクトリツリー全体から.htmlで終わるファイルを検索する。findはフィルタリング戦略を最適化し、パフォーマンスを向上させる。 最適化のレベルは、-O1,-O2,-O3の 3種類から選択できる。-O1最適化はデフォルトで、他のすべてのテストを実行する前にfindにファイル名に基づくフィルタリングを強制します。-O2レベルでの最適化は、-O1と同様にファイル名フィルタを優先し、他のよりリソース集約型の条件に進む前にすべてのファイルタイプのフィルタリングを実行します。 レベル-O3の最適化では、findが最も厳しい最適化を実行し、相対的な費用と成功の可能性に基づいてすべてのテストを並べ替えます。コマンド 説明 -O1Filter based on filename first (default){ ファイル名のフィルター。 -O2最初にファイル名、次にファイル タイプ。 -O3リソースと可能性を効率的に使用に基づいて、 findで自動的に検索結果を再注文できるようにします。 成功-maxdepth X現在のディレクトリと X レベル深いすべてのサブディレクトリを検索します。 -inameテキストケースに関係なく検索します。 -notテストケースと一致しない結果のみを返します。 -type fファイルを検索する。 -type dディレクトリを検索する。
コマンドラインを使ってLinuxでファイルを修正時刻で検索
findコマンドではファイルが最後に修正された時間に基づいてディレクトリ階層をフィルターすることができます。 たとえば、次のコマンドは、過去 7 日間に変更された.err拡張子を持つすべてのファイルを検索します:find / -name "*err" -mtime -7この例のコマンドは次の出力を返します:
/home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.errUse Grep to Find Files in Linux Using the Command Line
findコマンドは、ファイルの名前とメタデータに基づいてディレクトリ階層をフィルターすることだけが可能です。 ファイルの内容に基づいて検索する必要がある場合は、grep のようなツールを使用します。 次の例を考えてみましょう:find . -type f -exec grep "test" '{}' \; -printこのコマンドは、現在のディレクトリ階層 (
.) にあるファイル (-type f) であるすべてのオブジェクトを検索し、条件を満たすすべてのファイルに対してコマンドgrep "test"を実行します。 一致したファイルは画面に表示される(-print)。 中括弧({})は、検索結果のプレースホルダーである。{}はシングルクォートで囲まれ、grepに不正なファイル名を渡さないようにしている(')。-execコマンドはセミコロン (;) で終了するが、シェルによる解釈を避けるためにエスケープ (\;) されるべきである。例で使用されているファイル (
example.err) には “test” というテキストが含まれている。test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.errGrep は、現在の作業ディレクトリ内で文字列 “test” を含むすべてのファイルを識別しました。
Note
findコマンドが-execオプションを実装する以前は、xargsコマンドを使用して上記の例と同様の出力を生成できました:find . -type f -print | xargs grep "test"Process and Find Files Using the Find Command in Linux
-execオプションはfind式に一致するすべてのオブジェクトに対してコマンドを実行します。 次の例を見てみましょう:find . -name "example.err" -exec chmod o+r '{}' \;これは、現在の階層 (
.) にあるすべてのオブジェクトに対してrc.confというファイルを検索し、findコマンドの結果のファイルのパーミッションを変更するためにchmod o+rコマンドを実行するものです。 一致するものが存在するディレクトリで指定されたコマンドを実行するには、-execdirを使用します。-execまたは-execdirオプションは、追加のプロンプトなしに実行されます。How to Find and Delete Files Using the Linux Command Line
Caution
Use this option with extreme caution.Add the option
-deleteto delete all files that match expression to match match the end.以下の例では、
findは現在のディレクトリから始まる階層内のすべてのファイルを再帰的に探し、拡張子が.errで終わるすべてのファイルを削除します:find . -name "*.err" -deleteまだ質問がある場合は、
コミュニティに参加して、他の Linode と Linux ファンのためにあなたの質問を投稿してください:
関連質問。