基本的に、.csv ファイルを見つけるためにスキャンする必要があるディレクトリとサブディレクトリがあります。そこから、「foo」を含むすべての行を、見つかった csv から新しいファイル (元のファイルと同じディレクトリ内) にコピーしますが、見つかったファイルを反映した名前を付けます。
これまでのところ、
find -type f -name "*.csv" | xargs egrep -i "foo" > foo.csv
これにより、すべてが含まれる 1 つのバックアップ ファイル (foo.csv) が作成され、ファイルが見つかった場所はデータの一部になります。どちらも私は望んでいません。
私が欲しいもの:
たとえば、私が持っている場合:
csv1.csv
csv2.csv
どちらにも「foo」を含む行があります。これらの行を次の場所にコピーしたいと思います。
csv1_foo.csv
csv2_foo.csv
元のファイルの「foo」を含む行全体を除いて、バックアップに余分なものは何も入力しません。つまり、バックアップ データに元のファイル名は必要ありません。これは、現在のコードが行っていることです。
また、私は egrep を使用していることに注意する必要があると思いますが、私の例では正規表現を使用していません。特定のシナリオに適用するときに検索で正規表現を使用するため、新しいファイルに名前を付けるときにこれを考慮する必要があると思われます。それが難しすぎると思われる場合は、正規表現を考慮しない回答で問題ありません。
お早めにどうぞ!