findはファイル名を検索します。ほんとにごく頻繁に使う便利なコマンドです。ディレクトリとファイル名を指定して検索しますが、例によってfind / -name “*”こういうコマンドはナンセンスです。検索したいディレクトリに移動してその下位ディレクトリを再帰的に検索するのかベターかと思います。
$ find . -name "*.html"
ファイル数を数えるコマンドとかあったかもわからないけど、面倒なので書きだして行数数える。diffとる時なんかはこうやって書き出して比べてみるといいです。余分なファイルとか足りないファイルがあったりなかったり。
$ find . -name "*.html" >> htmllist.txt
慎重にやってほしいものですが、先日べらぼうに重いのでPDFだけでも消したいと思って、以下のようなコマンドに。-fものなので厳重注意です。できれば使わない方が身のため。
$ find . -name "*.pdf" -exec rm -f {} \;
再帰的にすべてのファイル一覧とかつくるときは、type -fでOKです。
$ find /home/user/www -type f
更新日などを指定して再帰的に検索します。この場合は現在の時間から3日前までの間の更新日のファイルを検索します。
find ./ -daystart -mtime -3
単純にディレクトリ名のみを検索したいときはtypeで指定してあげます。-nameオプションで検索対象のディレクトリ名を指定する感じです。正規表現も使えるので、-name ‘*-css’みたいに2014-cssみたいなディレクトリ名も検索できます。
find . -name 'css' -type d
無駄な空ディレクトリが結構あったりするので、そういうの検索します。これで検索可能なのですが、この検索結果で「空のディレクトリを削除する」際にはちょっと注意。これは、空のディレクリを含む上位のディレクトリも消してしまうので、数多くない場合は手で削除した方が無難ですね。
find . -type d -empty
カレントディレクトリ以下のすべてのファイルから指定のキーワードを検索するときはこれ。これは異常に使う。ないと死ぬ。
find ./ -name '*' | xargs grep 'オムニオラボ'
find同様に不毛な検索は体に毒なので、できるだけ対象ファイルを絞った方が早いし正確。アスタリスクですべてのファイルを検索するとjpgとかも検索対象になって、ファイル拡張子を指定する際には、
find ./ -name '*.html' | xargs grep 'オムニオラボ'
また、ディレクトリを指定して、ファイルに限定したいときはtypeを指定しておくときれいです。
$ find /etc -name '*' -type f | xargs grep 'オムニオラボ'
上記の全文検索と間違ってこのコマンド使うとおもしろことになるので注意してください。grepの全文置換は非常にいいですが、grep使わなくても再帰的に置換はできます。hogeをhugaに置換する場合は以下。
find . -type f | xargs sed -i 's/hoge/fuga/g'
面倒くさいのは/とか@とかあるとエスケープしないとダメというところです。sedは%hoge%huga%ということができて%を使った場合は/スラッシュとかエスケープしなくてもいいので便利なんですが、findと合わせ技にしたらエラーになりました。
もしかしたら、書き方が悪かったのかもしれないですが。
grep使ってファイルを指定する場合は、こんな感じでできました。ファイル拡張子指定する分だけ早いです。
find . -type f | grep -v '\.html$' | xargs sed -i 's/hoge/fuga/g'
ディレクトリの場合
find ./ -type d | xargs chmod 777
ファイルの場合
find ./ -type f | xargs chmod 666