コマンドライン検索からファイルの内容を 1 つのファイルにコピーするにはどうすればよいですか?

コマンドライン検索からファイルの内容を 1 つのファイルにコピーするにはどうすればよいですか?

すべての検索結果の内容を 1 つのファイルにコピーします。検索結果をコピーするのではなく、検索結果のファイル内容をコピーします。

dump.testたとえば、検索結果として 10 個のファイルのリストが返された場合、それらの 10 個のファイルの内容を 1 つのファイル (例)にコピーするとします。

答え1

GNUgrepxargs:

grep -rlZ search-text some/dir/ | xargs -r0 cat > dump.test

-lは、 に一致する行が少なくとも 1 つ含まれるファイルを一覧表示しますsearch-text-Zは、その行を NUL で区切って出力し、 に安全に渡せるようにしますxargs -0

-r内部のすべてのファイルをsome/dir/再帰的に検索します。

POSIX 的には:

find some/dir -type f -size +0 -exec grep -q search-text {} \; 
   -exec cat {} + > dump.test

grepこれは、空でないファイルごとに1 つのコマンドを実行することになるため、効率が低下します。

関連情報