私はファイル内のパターンを見つけるために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は標準入力からファイルのリストを受け入れません。