查找文件,grep 查找模式,头查找前 10 个文件,然后 tar 那些文件

查找文件,grep 查找模式,头查找前 10 个文件,然后 tar 那些文件

我正在使用 find 在文件中查找模式,然后我只想要找到的前十个并将其压缩。

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

我也曾尝试xargstar。这也会导致错误。我究竟做错了什么?

这是我从第一个命令中看到的内容:

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 不接受标准输入中的文件列表。

相关内容