findで検索した結果を削除したりgrepする方法

-exec command {} \;
  • 検索後、コマンドcommandを実行する。検索結果をcommandに引き渡すには、{}をもちいる。
  • \; の前に空白が必要。空白がないと、
    find: `-exec' に引数が見つかりません
    

    とか

    find: -exec: no terminating ";" or "+"
    

    というエラーになる。

  • 複数のコマンドを実行する場合は、-exec を複数指定すればよい。

例:

find ~ -name '*bak' -exec rm {} \;
  • 上記の例で-execにつづくrm {} \;が実行されるコマンド。最後の";"は-execのパラメタの終わりを示しており、その前の"\"は、";"がシェルに解釈されないようにエスケープする為のもの。

例:
ホームディレクトリ以下にある*~(emacsのバックアップファイル)を全て削除

$ find ~/ -name "*~" -exec rm {} \;

Subversionの作業コピーディレクトリから.svnディレクトリを全て削除する。

find . -name .svn -exec rm -rf {} \;

ディレクトリ配下のファイルをgrepする
(grepのオプション -H はファイル名表示、-n は行番号表示)

find ディレクトリ -type f -exec grep -nH 文字列 {} \;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください