特定の文字列を含まないファイル一覧を取得する
Posted on 2017/10/09 in tech
hogeとファイル中に記載されていないファイル一覧を取得したい。
ワンライナーで書けたのでメモ。
find . -name "*.html" -print0 | xargs -0 perl -nle '/hoge/ and close(ARGV) and next; print "$ARGV" if eof(ARGV);'
findでファイルを読み込む。
perlのclose(ARGV)は現在読み込み中のファイルをクローズする操作で、ただ、クローズ直後はファイルポインタがEOFになっただけなので、nextしてループを次にすることで、次のファイルを読み込みに相当させる。Perlではループ終了のための構文はbreakではなくてlastだが、上記でnextじゃなくてlastを記述すると、プログラム自体が終了してしまう。
雑な解説。