findとは
ファイルを検索するコマンド。( find [オプション] [パス][評価式] )
評価式(時間)
+ 数値 | 数値を起点として、より過去を示す | |
- 数値 | 数値を起点として、より現在に近いほうを示す | |
-amin | ファイルへのアクセス時間(分) | -amin 30 30分より前にアクセスされたファイル |
-cmin | ファイルの更新時間(分) (作成) | -cmin +40 40分より前に更新されたファイル |
-atime | ファイルへのアクセス時間(日) | -atime -30 30日以内にアクセスされたファイル |
-ctime | ファイルの更新時間(日) (作成) | -ctime +365 365日より前に作成されたファイル |
評価式(その他)
-name 文字列 | 指定した文字列がディレクトリ名以外の部分にマッチする | |
-iname 文字列 | 指定した文字列の大文字小文字を区別しない | |
-size 数値 | 指定したサイズよりも大きいサイズを検索 | +100k 100kB超える -10G 10GB未満(※) |
-type ファイルタイプ | 指定したファイルタイプを検索 | b ブロックファイル d ディレクトリ f ファイル l シンボリックリンク s ソケットファイル |
-user | ファイルの所有するユーザを示す | |
-group | ファイルを所有するグループを示す |
アクション
-name ファイル名 | ファイル名を指定して検索 | |
-exec コマンド | コマンドを実行 | -exec コマンド {} \; |
-fprint ファイル名 | 検索されたファイルのフルパスを「ファイル名」に出力 | |
検索したファイル名のフルパスを改行文字をつけて出力 | ||
-print0 | 検索したファイル名のフルパスを表示して、 最後にヌル文字をつける。 | |
-and (-a) | 検索条件「かつ」 | |
-or (-o) | 検索条件「または」 |
例えば
ファイル名を指定して検索
find / -name example.txt
カレントディレクトリにある1日以内に修正した.exeの拡張子のファイル一覧検索
find ./ -name *.txt -type f -mtime 1
カレントディレクトリ以下にある30日を超えてアクセスされていないファイルを検索し、削除
find -atime +30 -type f -exec rm {} \;
もしくは find -atime +30 -type f | xargs rm
/var/www/blog内にあるファイルすべてにパーミッション「実行」を付加する
find /var/www/blog -type f -print0 | xargs -0 sudo chmod a-x
カレントディレクトリ内の直近1週間内に変更された、名前が「.exe」で終わるファイルの検索
find ./ -ctime -8 -and -name *.exe
カレントディレクトリ内にある30日を超え60日以内に変更された、
名前にlistまたはendを含むファイル
find ./ -ctime +30 -and -ctime 60 -and \( -name *list* -or -name *end* \)
xargsとは
標準入力から受け取った文字列を引数に指定して、コマンドを実行する
100日を超える日数の間更新されていないファイルを削除するには
find . -mtime +100 -type f | xargs rm
とします。ただしこれは
find . -mtime +100 -type f -exec rm {} \;
と同じです。
※「-exec」は引数が多すぎるとシェルの制限を超過して処理できない場合がある。「xargs」はそれでも処理できます。
-0 | 入力を空白や改行ではなくNULL文字で区切る | |
-a ファイル | 標準入力の代わりにファイルから項目を読み込む |
メモ:ファイル名やディレクトリ名にスペースがあると、スペースが区切り文字と認識されてエラーになることがある。そのようなときは、findコマンドで「-print0(ゼロ)」オプションを使い、xargコマンドで「-0(ゼロ)」オプションを使うと、ヌル文字が区切り文字として使用することができる。(日経Linux2023年3月号P40)
コメント