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.err
directory_1
にいて、ディレクトリまたはそのサブディレクトリの中からファイルexample.err
を見つけたい場合、次のコマンドを発行できます:find . -name example.err
出力は次のようになります:
./example.err./directory_1/example.err
出力は
directory_1
ディレクトリ構造を反映したものになっています。├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err
Find 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
が最も厳しい最適化を実行し、相対的な費用と成功の可能性に基づいてすべてのテストを並べ替えます。コマンド 説明 -O1
Filter 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.err
Use 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.err
Grep は、現在の作業ディレクトリ内で文字列 “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
-delete
to delete all files that match expression to match match the end.以下の例では、
find
は現在のディレクトリから始まる階層内のすべてのファイルを再帰的に探し、拡張子が.err
で終わるすべてのファイルを削除します:find . -name "*.err" -delete
まだ質問がある場合は、
コミュニティに参加して、他の Linode と Linux ファンのためにあなたの質問を投稿してください:
関連質問。