en.gはwebサイト制作に関する技術的な情報を発信するサイトです。

【Linuxコマンド】findとmtimeオプションを使用して大量のファイルを検索、削除する方法

大量のファイルから特定の日付範囲のファイルを検索、削除したい時は、Linuxコマンドのfindとmtimeオプションを使用します。wcコマンドやxargsコマンドを併用しますが、使い方で処理速度に差がでてきますので、そのあたりをまとめてみました。

該当する期間の件数を、findコマンド+mtimeオプションとwcコマンドで検索

先ず、日付で期間を絞り込む場合はmtimeオプションを使用します。mtimeの後ろに続く数値で絞り込みの振る舞いが変わります。

-mtitme +n n日前以前に該当するもの
-mtime -n n日前から現在までに該当するもの
-mtime n n日前に該当するのもの

大量のファイルに対して検索をする場合、該当する件数を知りたい時があります。その場合、findコマンドを使用しますが、そのまま使用するとリスト表示されてしまうのでwcコマンドに-lオプションを合わせて使用します。こうすることでリスト化されたときの行数を数えて表示してくれます。単純にファイル数を数えているわけではなく「該当するファイルをリスト化し行数を数えて表示している」という構造になっています。


# |
# | 7日前より古いファイル
# |
find ./exampledir/ -mtime +7 | wc -l

							

findコマンド+mtimeオプション+xargsコマンドで削除

findコマンド+mtimeオプションをxargsコマンドでrmコマンドを連結させて使用します。execコマンドでも同様のことができますが、大量に処理する場合は処理時間に差が出ます。こちらの記事で詳しく説明されてます。また、コメント欄にはexecコマンドに対しての言及もあり、こちらも参考になります。


# |
# | xargs
# |
find ./exampledir/ -mtime +7 | xargs rm -f

# |
# | execの場合はこうではなく
# |
find ./exampledir/ -mtime +7 -exec rm -f {} \;

# |
# | こう
# |
find ./exampledir/ -mtime +7 -exec rm -f {} +