find -execオプションを完全解説!初心者でも理解できるLinuxの検索&コマンド実行術
生徒
「Linuxでファイルを探したあとに、そのまま削除とかってできますか?」
先生
「はい、できますよ。findコマンドの-execオプションを使えば、検索結果に対して任意のコマンドをそのまま実行できます。」
生徒
「なんか便利そうだけど、どうやって使えばいいのか全然わからないです…」
先生
「大丈夫、初心者でも分かるように、これから丁寧に解説していきますね!」
1. find -execオプションとは?
findコマンドは、Linuxでファイルやディレクトリを検索するためのコマンドです。その中でも-execオプションを使うと、検索結果に対して自動でコマンドを実行することができます。
たとえば、特定の名前のファイルを探して、それを削除したり、圧縮したり、別の場所にコピーしたりといったことが、1つのコマンドでできます。
イメージとしては、「探して見つけたら、そのまま指示通りの作業をしてくれるお手伝いさん」みたいなものです。
2. 基本的な構文を見てみよう
findコマンドに-execを使うときの基本形は、次のようになります。
find [検索開始ディレクトリ] [条件] -exec [コマンド] {} \;
{}は「見つかったファイル1つ1つ」を意味し、\;はコマンドの終了を示します。
3. ファイルを検索して削除する例
たとえば、カレントディレクトリ(現在いる場所)から、.logという拡張子のファイルを探して、それを削除したい場合は、次のように書きます。
find . -name "*.log" -exec rm {} \;
この例では、現在のディレクトリ「.」以下を対象に、名前が*.logで終わるファイルを探して、それをrmコマンドで削除しています。
4. 実行結果の確認
まずは試しにtouchコマンドでログファイルを作成してから、実際に削除してみましょう。
touch test1.log test2.log
ls *.log
test1.log test2.log
find . -name "*.log" -exec rm {} \;
ls *.log
ls: cannot access '*.log': No such file or directory
このように、ファイルが確かに削除されていることが確認できます。
5. -execとxargsの違い
似たようなことができるコマンドにxargsがありますが、-execは1ファイルごとにコマンドを実行するのに対し、xargsは複数ファイルをまとめて処理します。
たとえば、次のように使います:
find . -name "*.log" | xargs rm
xargsの方が高速ですが、ファイル名にスペースがあるとエラーになる可能性があります。初心者のうちは、-execの方が安心して使えるでしょう。
6. よく使うオプションの組み合わせ
ここでは、初心者がよく使うfind -execの組み合わせを紹介します。
① 空のファイルを削除
find . -type f -empty -exec rm {} \;
② 7日以上前に更新されたファイルを削除
find . -type f -mtime +7 -exec rm {} \;
③ 所有者が「user1」のファイルをコピー
find . -user user1 -exec cp {} /tmp/backup/ \;
これらのように、ファイルの種類や更新日時、所有者など、様々な条件で検索して、それに対して任意のコマンドを実行できます。
7. よくある失敗と注意点
\;の部分を忘れると、エラーになります。また、{}と\;の間にはスペースが必要です。
コマンドの構文を少し間違えただけでも、意図しないファイルを削除する可能性があるので、最初は-exec echoを使って実行内容を確認すると安心です。
find . -name "*.log" -exec echo rm {} \;
./test1.log
./test2.log
このように、rmの代わりにechoを使うことで、削除対象だけを確認できます。
8. sudoやrootでの実行について
/var/logのような管理者権限が必要な場所で使う場合は、sudoを使う必要があります。たとえば、次のように実行します。
find /var/log -name "*.log" -exec rm {} \;
ただし、管理者権限でファイルを削除するときは慎重に操作してください。
9. まとめの前に知っておきたい豆知識
findはファイルを探すだけでなく、-execと組み合わせることで、「探す+処理」が1つの流れでできる非常に強力なLinuxコマンドです。
定期的な掃除やバックアップ、メンテナンス処理を自動化したいときにも役立ちます。