Find覚え書き

基本

findした実行結果に対して、なにかコマンドを叩きたいときはこんな感じ。

find . -name "*.css" -exec chmod 555 {} \;

カーリーブラケットが見つかったファイルに相当します。んで、実行するコマンドはセミコロンで終わりを明示的にしてあげないといけないようです。

実例

以下の条件でのfind

  • /tmp/ディレクトリ以下
  • サイズが46未満(やばい、未満か以下か怪しい)
  • 名前が'report'で始まる
  • 探すのは指定したディレクトリのみ
  • 見つかったファイルを消す

find /tmp/ -size -46 -name "report*" -maxdepth 1 -exec rm {} \;

発展

基本のやり方だと見つかったファイルをひとつずつexecしていくが、xargsを使えば見つかった結果のファイルにまとめて処理をかけられる。

find . -print | xargs grep hoge /dev/null

最後の

/dev/null

はxargsを使ううえので魔除け。詳細は理解していません。はファイル名を常に出すために必要。grepは検索対象が複数あればファイル名を出してくれるけど、一つだけならファイル名を表示してくれない。なので、絶対ゼロバイトの/dev/nullを検索対象として渡して、常に対象が複数になるようにしている。
会社のひとに教えてもらった。