ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

findコマンドで見つけたファイルを消す

ファイルをファイル名などで検索して消すことが度々あるのですが、毎度忘れて検索するので備忘録としてまとめちゃいます。

テンプレ

find {検索したいファイルパス} {検索条件} -exec {追加で行いたいコマンド} \;

サンプル

名前にhogeを含むファイルを見つけて消したい

find ./ -name "*hoge*" -type f -exec rm -f {} \;

-execがポイントで、見つけたファイルに対して操作することができます。 {}には見つかったファイルのファイルパスが入り rm -rf {ファイル名}となって消されます。複数ファイルが見つかった場合はループになります。

\;は無いとエラーになります。「-execによる処理はここまでだよ」と教えています。

名前にfugaを含むディレクトリを見つけてtestというprefixをつけたい

find ./ -name "*fuga*" -type d -exec mv {} test{} \;

ちょっとした応用です、そんなに大きく違うことはしていません。 {}を複数使っているくらいです。

3日以上アクセスされていないファイルを消したい

find ./ -atime +2 -type f -exec rm -f {} \;

-atime +2で最後にアクセスされた時間が2日より前、つまり3日以上前のファイルを抽出して消しています。

findコマンドの時間周りの検索は色々ややこしいです。ここでは割愛しますが、以下のサイトで解説されています。また気が向けばここでもまとめたいと思います。

x68000.q-e-d.net

まとめ

|xargsコマンドで頑張ることもできますが、検索したものに対して操作するものはすでに用意されていたので楽にできます。そして忘れやすいので(\;とか)ここに残しておきました。これで次から安心。

ちなみにxargsの活用例はこちらです。↓

www.te-nu.com