特定の文字列を含まないファイル一覧を取得する

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でファイルを読み込む。 perlclose(ARGV)は現在読み込み中のファイルをクローズする操作で、ただ、クローズ直後はファイルポインタがEOFになっただけなので、nextしてループを次にすることで、次のファイルを読み込みに相当させる。Perlではループ終了のための構文はbreakではなくてlastだが、上記でnextじゃなくてlastを記述すると、プログラム自体が終了してしまう。

雑な解説。