目次

Unix :: コマンド / find

コマンド説明
findfind ユーティリティは、指定ディレクトリツリーを再帰的に下って、ツリー上の各ファイルについてオプションで指定された処理を実行します。


単純な検索

ファイルのみ検索

% find /path/to/hoge -type f

ファイルのみ検索(再帰スキャンしない(指定ディレクトリのみ検索))

% find /path/to/hoge -maxdepth 1 -type f

ファイルのみ検索(カレントディレクトリ配下を検索)

% find . -type f

ファイル名が「hoge.txt」のファイルを検索

% find . -type f -name 'hoge.txt'

ファイル名が「hoge.txt」でないファイルを検索

% find . -type f ! -name 'hoge.txt'

ディレクトリのみ検索

% find /path/to/hoge -type d

シンボリックリンクのみ検索

% find /path/to/hoge -type l



日数、時間を指定した検索

アクセスを基準にする (access)

-atime [+-] N

7日前にアクセスされたファイル

% find /path/to/hoge -type f -atime 7

8日以前にアクセスされたファイル

% find /path/to/hoge -type f -atime +7

6日以内にアクセスされたファイル

% find /path/to/hoge -type f -atime -7

-amin [+-] N

10分前にアクセスされたファイル

% find /path/to/hoge -type f -amin 10

11分以前にアクセスされたファイル

% find /path/to/hoge -type f -amin +10

9分以内にアクセスされたファイル

% find /path/to/hoge -type f -amin -10


ファイルステータスの変更を基準にする (change)

-ctime [+-] N

7日前にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -ctime 7

8日以前にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -ctime +7

6日以内にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -ctime -7

-cmin [+-] N

10分前にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -cmin 10

11分以前にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -cmin +10

9分以内にファイルステータスが変更されたファイル

% find /path/to/hoge -type f -cmin -10


修正されたファイルを基準にする (Modify)

-mtime [+-] N

7日前に修正されたファイル

% find /path/to/hoge -type f -mtime 7

8日以前に修正されたファイル

% find /path/to/hoge -type f -mtime +7

6日以内に修正されたファイル

% find /path/to/hoge -type f -mtime -7

-mmin [+-] N

10分前に修正されたファイル

% find /path/to/hoge -type f -mmin 10

11分以前に修正されたファイル

% find /path/to/hoge -type f -mmin +10

9分以内に修正されたファイル

% find /path/to/hoge -type f -mmin -10



ファイルサイズを指定した検索

-size [+-] N[ckM]

ファイルサイズが 500 バイトのファイルを検索

% find /path/to/hoge -type f size 500c

ファイルサイズが 500 キロバイト以上のファイルを検索

% find /path/to/hoge -type f size +500k

ファイルサイズが 5 メガバイト以下のファイルを検索

% find /path/to/hoge -type f -size -5M


関連情報
ファイル容量が 0 バイトのファイルを検索する



パーミッションを基準にする (Permission)

-perm

「グループ」に「書き込み権限がない」ファイル

% find /path/to/hoge -type f ! -perm -g+w

「その他のユーザー」に「読み込み権限がない」ファイル

% find /path/to/hoge -type f ! -perm -o+r

「8進数」で「777」のファイル

% find /path/to/hoge -type f -perm 777



AND・OR条件を指定した検索

ファイル名が「hoge.txt」かつ、ファイルサイズが「5000バイト以上」のファイルを検索

% find . -name 'hoge.txt' -and -size +5000c

ファイル名が「hoge.txt」または「fuga.txt」のファイルを検索

% find . -name 'hoge.txt' -or -name 'fuga.txt'



条件にマッチしたファイルやディレクトリをコピー、削除する

カレントディレクトリ配下のすべてのディレクトリをホームディレクトリ配下の「bakディレクトリ」にコピーする

% find . -type d -exec cp {} ~/bak \;

12分以前にアクセスされたファイルを削除する

% find /path/to/hoge -type f -amin +11 -exec rm {} \;

※. PHPセッションの削除に便利です
でも、これをcronで実行している場合に、削除対象が1つもなかった時エラーメールが飛ぶのが難点(メールは設定によります)
なお、回避策には xargs を使います



正規表現を使った検索

正規表現検索

% find . -regex <正規表現>

大文字小文字を区別しない正規表現検索

% find . -iregex <正規表現>

※. 検索対象にパスが含まれることに注意。
例えば「数字の連続.txt」のファイルを検索するのに「[0-9]+\.txt」という正規表現を入れても検索できない。
正しくは「.*[0-9]+\.txt」と入れる。なぜなら「001.txt」というファイルはパスを含むと「./001.txt」になるからである(カレントから検索した場合)

[誤] % find . -regex [0-9]+\.txt
[正] % find . -regex .*[0-9]+\.txt