我正在使用 find 在文件中查找模式,然后我只想要找到的前十个并将其压缩。
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 不接受标准输入中的文件列表。