findコマンドとdeleteオプションについて
findコマンドで特定ディレクトリ内で90日以上前に更新されたファイルを検索して、その結果を削除したい場合は、主にfindコマンドとdeleteオプションを組み合わせて使用します。
# 特定のディレクトリで90日より古い(91日前以降)ファイルを削除する $ find /path/to/your/directory -type f -mtime +90 -delete
deleteオプションですが、GNU findutilsパッケージの一部として提供されており、RHEL(Red Hat Enterprise Linux)のかなり古いバージョンから利用可能です。
具体的には、RHEL 5(2007年リリース)・Ubuntu 4.10(2004年リリース)以降の標準のfindutils
に含まれているため、それ移行のバージョンでは利用できます。
古くからエンジニアをされている方は、「find … -exec rm {} +」や「find | xargs rm -f」の方が馴染みがあったりしますが、速度面を考えるとdeleteオプションを組み合わせが良いかと思います
findコマンドで結果を削除する場合の速度について
find結果を削除する場合のコマンドを利用する場合は、下記のようなコマンドがあります。速度面では、-delete
のオプションが最速です。
find ... -delete
(最速)find ... -exec rm {} +
またはfind | xargs rm -f
(同程度に速い)find ... -exec rm {} \;
(最も遅い)
-delete等をオプションの速度の違いですが、各コマンドによって内部処理が違うためです
find ... -delete (最速)
外部コマンドを一切起動せず、find
自身がunlink
システムコールでファイルを削除します
$ find ... -delete (最速)
find ... -exec rm {} + (速い)
複数のファイル名をまとめてrm
コマンドに渡すため、rm
の起動回数が大幅に削減されます。
$ find /path/to/dir -type f -mtime +90 -exec rm -f {} +
find | xargs rm -f (速い)
xargs
がrm
の引数長を効率的に処理し、起動回数を抑えます。-exec ... +
と同程度の性能です。
$ find /path/to/dir -type f -mtime +90 | xargs rm -f
find ... -exec rm {} \; (最も遅い)
findが見つけたファイル一つ一つに対して、新しいrmプロセスを起動します。
$ find /path/to/dir -type f -mtime +90 -exec rm -f {} \;