特定の文字列を含まないファイル一覧を取得する
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
を記述すると、プログラム自体が終了してしまう。
雑な解説。