Linuxでファイルやディレクトリを検索する際、便利なのがfindコマンドです。
本記事では、「再帰的にファイル名を検索する」というテーマに焦点を当て、findコマンドの使い方を解説します。
基本構文
findコマンドの基本構文は以下の通りです。
find [検索開始ディレクトリ] [条件] [アクション]- 検索開始ディレクトリ
検索を開始するディレクトリのパスを指定します。/を指定するとシステム全体を検索しますが、検索範囲が広くなるため注意が必要です。 - 条件
検索する対象の条件(例: ファイル名、サイズなど)を指定します。 - アクション
検索結果に対して実行する処理を指定します。省略すると検索結果がそのまま表示されます。
ファイル名を再帰的に検索する方法
特定の名前やパターンに一致するファイルを検索するには、-nameオプションを使用します。
findコマンドはデフォルトで指定したディレクトリ以下を再帰的に検索します。
そのため、特別なオプションを指定しなくても再帰検索が行われます。
例1: 現在のディレクトリ配下から「example.txt」を検索する
find . -name "example.txt".
現在のディレクトリを指定しています。-name "example.txt"
ファイル名が正確にexample.txtと一致するファイルを検索します。
例2: 部分一致で検索する(ワイルドカード使用)
find . -name "*.txt"*.txt
.txtで終わるすべてのファイルを検索します。
注意:
-nameオプションは大文字小文字を区別します。大文字小文字を無視して検索したい場合は、次のセクションをご参照ください。
大文字小文字を区別せずに検索する
大文字小文字を区別せずに検索する場合は、-inameオプションを使用します。
例: .TXTや.txtを含むファイルを検索
find . -iname "*.txt"複数の条件を指定して検索する
-o(OR)や-a(AND)を使って複数の条件を組み合わせて検索することも可能です。
例: .txtまたは.logファイルを検索
find . \( -name "*.txt" -o -name "*.log" \)\(と\)
条件をグループ化するための括弧です。エスケープが必要です。
検索結果のファイルを削除する
検索したファイルに対して特定の操作を行いたい場合、-execオプションを使用します。
例: 検索結果のファイルを削除する
find . -name "*.tmp" -exec rm {} \;-exec
条件に一致したファイルに対して指定したコマンドを実行します。{}
検索結果の各ファイル名がここに挿入されます。\;
-execオプションの終了を示します。
よく使うオプションまとめ
| オプション | 説明 |
|---|---|
-name | 指定した名前と一致するファイルを検索 |
-iname | 大文字小文字を区別せずに名前を検索 |
-type f | ファイルのみを対象に検索 |
-type d | ディレクトリのみを対象に検索 |
-size +N | サイズがNブロック以上のファイルを検索 |
-mtime -N | 最終更新日時がN日以内のファイルを検索 |
-exec | 条件に一致するファイルに対してコマンドを実行 |
実用例まとめ
1. 特定のファイルを再帰的に検索
find /home/user -name "myfile.txt"2. すべての.logファイルを検索し、削除
find /var/log -name "*.log" -exec rm {} \;3. 直近7日間に変更された.confファイルを検索
find /etc -name "*.conf" -mtime -7ファイルの中身を検索したい場合
ファイルの中身を検索したい場合は、こちらの記事をご参照ください。
まとめ
findは多様な条件を組み合わせて柔軟に検索することができるコマンドです。
再帰的な検索はfindの標準動作であるため、特別な指定は不要です。
ぜひ、日常的なファイル管理やトラブルシューティングに活用してみてください。
Linuxユーザにお勧めの本
以上で本記事の解説を終わります。
よいITライフを!