find 条件に合うファイルをディレクトリの下から探す
find [探す場所] [条件] [アクション]試してみる
find site -name "*.css"名前が .css で終わるファイルを探します。条件の * は引用符で囲みます。
find site -type d-type d で、ディレクトリだけを探します。f なら通常のファイルです。
find site -type f -size +1k1KB より大きい通常のファイルを探します。
find site -type f -mtime +365最後の更新から365日より前のファイルを探します。
find site -type f -name "*.css" -exec ls -l {} \;見つけたファイルごとに、-exec でコマンドを実行します。{} が見つかったファイル名になります。
find site -type f -name "*.txt" -delete見つかったファイルを削除します。
主なオプション
-name パターン | 名前で探す。大文字小文字を区別しない場合は -iname |
|---|---|
-type 種類 | ファイルの種類で探す。f は通常のファイル、d はディレクトリ、l はシンボリックリンク |
-size n | サイズで探す。+1k は1KBより大きい、-1M は1MB未満 |
-mtime n | 更新日時で探す。+7 は7日より前、-7 は7日以内 |
-user 名前 | 所有者で探す |
-perm モード | 権限で探す。-perm 644 はちょうど644、-perm -u+x は所有者に実行権限があるもの |
-exec コマンド {} \; | 見つかったファイルごとにコマンドを実行する |
-maxdepth n | 探すディレクトリの深さを制限する |
解説
基本の形
find 探す場所 条件 と書きます。探す場所を省くとカレントディレクトリです。標準では、条件に合ったファイルのパスを表示します。条件を指定しなければ、下にあるすべてを表示します。
名前の条件
-name のパターンは、シェルではなく find に渡す必要があります。*.css はシェルが展開してしまうので、"*.css" のように引用符で囲みましょう。
数値の指定
-size、-mtime などの数値は、n(ちょうど)、+n(より大きい)、-n(より小さい)の3通りがあります。-size の単位は c(バイト)、k、M、G です。-mtime は24時間を1日として数えます。
条件の組み合わせ
条件を並べると、すべてを満たすもの(AND)になります。-o で OR、! で否定です。たとえば find . -name "*.log" -o -name "*.tmp" のようにします。
見つけたものに処理をする
-exec コマンド {} \; は、1件ずつコマンドを実行します。\; の代わりに + を使うと、まとめて1回のコマンドに渡せます。-delete は削除です。条件を先に書いて確かめてから使いましょう。