UNIX 上である程度ファイルを選別してから別のコマンドにパイプする方法の紹介。
例えば、あるディレクトリの中のHTMLファイルからだけ電話番号が記載されているファイルを抽出するなど。
cd /path/to/dir
grep -r 03-1234-5678 *
grep -r 03-1234-5678 *
としてもいいのだが、これだとディレクトリ内に画像が含まれていたりする場合も全てのファイルに grep を掛けるので効率が悪い。
find . -name “*.html” -type f -exec grep 03-1234-5678 {} \;
としても良いが、これだと1ファイルごとに grep が起動されるので効率が悪い。
と言うことで、
ディレクトリの中のHTMLファイルからだけ電話番号が記載されているファイルを抽出する
find . -name “*.html” -type f | xargs grep 03-1234-5678
この他の使い方
今日追加したファイルだけ csv add する
find . -type f -newerct ’00:00 today’ | xargs cvs add
1年以上変更していないファイルを cvs remove する
find . -type -f ! -newerct ‘1 year ago’ #確認
find . -type -f ! -newerct ‘1 year ago’ | xargs cvs remove -f
find . -type -f ! -newerct ‘1 year ago’ | xargs cvs remove -f
新しいファイル/ディレクトリを cvs add する
cvs -qn update | grep “^\?” | sed -e ‘s/^\?//g’ | xargs cvs add