find コマンドはディレクトリツリーをたどり、各項目を名前、種類、サイズ、変更時刻などの条件に照らしてテストします。
コマンドライン · レッスン 14
find
名前、種類、サイズ、時刻でディレクトリツリーを検索し、確認済みの一致項目へ操作する方法を学びます。
検索場所を選ぶ
基本構文は次のとおりです。
find [PATH] [EXPRESSION]
パスが出発点を選び、式がその下の項目を選択または操作します。
次のコマンドは、/home とその子孫から puppies.jpg という名前の項目を検索します。
$ find /home -name puppies.jpg
既定で再帰的に検索します。現在のディレクトリツリーを検索する場合は、出発点に . を使います。
現在のディレクトリとその子孫から、notes.txt という名前の項目を検索するコマンドはどれですか?
名前と種類を一致させる
-name テストは正確なベース名またはシェル形式のパターンを受け取ります。現在のシェルが展開せず find へそのまま渡すよう、ワイルドカードパターンを引用します。
$ find . -name "*.txt"
引用符がなければ、find の開始前に現在のディレクトリを対象としてシェルが *.txt を展開することがあります。大文字と小文字を区別しない名前の一致には、-name の代わりに -iname を使います。
-type d でディレクトリ、-type f で通常ファイルを選びます。
$ find /home -type d -name MyFolder
ここでは両方のテストを満たす必要があります。項目がディレクトリであり、ベース名が MyFolder でなければなりません。
現在のディレクトリ以下で、名前が .txt で終わる通常ファイルを検索するコマンドはどれですか?
サイズと変更時刻を一致させる
-size では、指定単位より大きい場合に +、小さい場合に - を使います。
$ find . -type f -size +10M
$ find . -type f -size -1k
大文字の M は 1,048,576 バイト単位、小文字の k は 1,024 バイト単位です。find は数値比較の前に、選択した単位へサイズを切り上げるため、境界の動作はその単位に基づきます。
-mtime で、ファイルの変更から経過した完全な 24 時間単位の数をテストします。
$ find . -type f -mtime -7
$ find . -type f -mtime +30
-mtime -7 は 7 未満、-mtime +30 は 30 より大きい値に一致します。完全な 24 時間単位を使うため、カレンダーの日付が変わる午前 0 時を境界にはしません。
. 以下で、変更からの経過時間が完全な 24 時間の 7 単位未満である通常ファイルを検索するコマンドはどれですか?
一致項目を表示、操作する
操作を指定しなければ、GNU find は一致したパスを表示します。式の操作を明確にしたい場合は、-print を明示できます。
一致項目を明示的に表示します。
$ find . -name "*.log" -print
-exec で一致項目に別のコマンドを実行します。
$ find . -name "*.log" -exec ls -l {} \;
\; 形式では、コマンドを呼び出すたびに {} が 1 つの一致パスへ置き換えられます。セミコロンは -exec 操作を終え、シェルから find へ渡るようエスケープされています。
-delete や、ファイルを変更する -exec コマンドなどの破壊的操作を使う前に、同じテストを -print で実行し、すべての結果を確認してください。出発点を狭くし、-maxdepth N を使うことでも検索範囲を制限できます。
後で古い .log ファイルを削除する可能性のある find コマンドを作っています。最初に何をすべきですか?
find . -name "*.log" -exec ls -l {} \; で、{} は何を表しますか?
permission denied メッセージは通常、現在のアカウントがツリーの一部を検索できないことを示します。より狭く関連する出発点を優先し、拡大されたアクセスを理解して意図するまでは権限を高めないでください。
検索式の構築を練習するには、次のハンズオンラボを利用してください。
- **Linux find コマンド:ファイルの検索**:さまざまな条件に基づいてファイルとディレクトリを探す
findの使い方を練習します。 - **重要なシステムリソースの発見**:
findなどでファイルや実行可能ファイルを効率よく見つけます。
レッスン完了
find を完了しました
これで範囲を絞った find 式を作り、操作前に結果を確認できるようになりました。
有用な最小範囲の出発点を選ぶ。
名前パターンを引用し、種類テストと組み合わせる。
サイズまたは完全な 24 時間単位の変更時刻で絞り込む。
必要に応じて再帰の深さを制限する。
破壊的操作の前に一致項目を表示して確認する。