findの検索したファイルを削除する方法

ubuntu_logo Linux
ubuntu_logo

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 (速い)

xargsrmの引数長を効率的に処理し、起動回数を抑えます。-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 {} \;
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
LinuxUbuntu
スポンサーリンク
シェアする
adminをフォローする
タイトルとURLをコピーしました