私が実行したコマンドは、ディレクトリの下のファイルへの相対パスのリストを提供します。find my_dir
コマンド自体は異なりますが、使用法の面で考えてみてください。
リスト内の各ファイルについて、ファイル自体の内容に基づいてリストをフィルタリングするコマンドにパイプしたいと思います。同じまたは類似のセマンティクスを探しているが、egrep -v
パス自体ではなくファイルの内容に対して正規表現を実行するには、ファイルを開いて読み取る必要があります。
単純なパイプコマンドフローを使用してこれを行うにはどうすればよいですか?例:
find some_dir/ | egrep_contents -v 'Exclude pattern' | xargs -n1 do_something_with_filtered_files
この場合、egrep_contents
理想的にはこの質問で要求されたコマンドになります。一致するものが見つかるまで、ファイルの各行で指定された除外パターンを実行します。一致するものが見つかると、ファイルパスは次のパイプラインコマンドに渡されません。
状況に応じて、Windows用のGit(MINGW)に付属のGit Bashでこれらのコマンドを実行しています。
答え1
このgrep
オプションはあなたが探しているもの--files-without-match
かもしれません。-L
そのファイルの内容が指定されたパターンと一致しないファイルパスを印刷するようにgrepに指示します。例えば、
$ echo "bar" > foo
$ echo "quux" > baz
$ ls
baz foo
$ find . -type f | xargs -n1 grep -EL bar | xargs -n1 cat
quux
cat
ここで、「quux」は、内容に「bar」が含まれていないファイルで実行した結果であるため、印刷されます。