コマンドライン検索でファイルの内容を単一のファイルにコピーする方法は?

コマンドライン検索でファイルの内容を単一のファイルにコピーする方法は?

すべての検索結果の内容をファイルにコピーします。検索結果をコピーしたくなく、検索結果のファイル内容をコピーしたいと思います。

たとえば、私の検索結果は10個のファイルのリストを返し、その10個のファイルの内容を単一のファイル(たとえば)にコピーしようとしますdump.test

答え1

GNUを使用しgrepて、次の操作を行いますxargs

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つのコマンドを実行することを意味するので、効率が悪くなります。

関連情報