ファイルを検索するには、検索パターンをgrepして最初の10個のファイルを検索し、そのファイルをtarします。

ファイルを検索するには、検索パターンをgrepして最初の10個のファイルを検索し、そのファイルをtarします。

私はファイル内のパターンを見つけるためにfindを使用しています。それから最初の10個だけを見つけて圧縮したいと思います。

find /var/log/file | xargs grep "pattern" | head -n10​ | tar -czvf tarfile.tgz

私もxargsそれを試しましたtar。これによりエラーが発生する可能性があります。私は何が間違っていましたか?

これが最初のコマンドで見たものです。

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

答え1

あなたはそれを使用することができます

tar cvzf files.tar.gz $(find /var/log/file -type f -exec grep -l "pattern" {} + | \
head -n10)

ここでは、grep -lパターンに一致するファイルのみが印刷されます。


-Pこのようなエラーが発生した場合は、オプションを使用する必要があります。tar

エラーtar:メンバー名から先行する「/」を削除します。

バラよりman tar

-P, --absolute-names
     don't strip leading '/'s from file names

あるいは、-Cアーカイブファイルのフルパスを指定する代わりに、変更ディレクトリを指定することもできます。

答え2

努力する

tar cvzf tarfile.tgz $(find /var/log/file | grep "pattern" | head -n10 )

どこ

  • 内部コードは$( )10個のファイルのリストを作成します。

cpioとは異なり、tarは標準入力からファイルのリストを受け入れません。

関連情報