どうも、クーです!
先日、あるディレクトリ内の更新日付が1カ月以上前のファイルを削除してほしいという
依頼が来ておりました。
試しにディレクトリを見てみたのですがファイル数が1000件ほどありまして...
1つ1つ見るのは流石にめんどくさい!!
調べてみるとfindとxargsを利用して日付でのファイル操作ができるみたいだったので
今回はこちらのファイル操作方法を簡単にまとめてみようかと思います!
findコマンドで一定の日付より古いファイルを見つける
まずはfindコマンドで一定の日付より古いファイルを抜き出してみましょう!
今回は1カ月以上古いファイルを抜き出したいので、findコマンドのmtimeオプションを利用して
30日以上前に更新されたファイルだけ抜き出してみようかと思います!
find [対象ディレクトリ] -mtime +30
mtimeオプションは「ファイルの更新日時(日)」を指定するオプションになります。
日時については、日にちだけの指定、例えば30を指定すると30日前に更新されたファイルを検索します。
また、日時のオプションについては現在を基準に「ー」が「以内」、「+」が「以上」を表すので
今回のように+30を指定すれば、最終更新が現在より30日以上前となっているファイルを検索することができます。
xargsコマンドを使って、findで見つけたファイルを操作する
それでは、findの結果をxargsコマンドに渡してファイルを操作してみましょう。
xargsは標準入力を別のコマンドの引数として渡すことができるコマンドです。
今回はfindの結果を削除したいので、パイプラインとxargsを使ってrmに結果を渡しましょう!
find [対象ディレクトリ] -mtime +30 |xargs rm
上記のコマンドで更新日時が30日以上前のファイルが削除されるかと思います。
ここでrmをrm -rfとすればディレクトリごと削除できますが、
誤った対象を選んでいる場合は問答無用で削除されてしまいます(恐ろしい…)
そのため、まずはfindで検索したファイルをls -alに通すなどして対象が誤っていないかを確認するようにしましょう!
find [対象ディレクトリ] -mtime +30 |xargs ls -al
最後に
findコマンドの結果をxargsに渡すことで、より簡単にファイルの操作ができるようになりましたね!
ここでは紹介していないオプションやより良い使い方もあるかと思いますので、
ぜひご自身でも調べていただけると嬉しいです!
これからも一緒に手間がかかる作業をジャンジャン効率化していきましょう!
以上、クーでした!