在UBUNTU和CENTOS。
我有一些文件,我想根据他们的内容进行焦油。
$ grep -rl "123.45" .
返回这种格式的约10个文件的列表:
./somefolder/someotherfolder/somefile.txt ./anotherfolder/anotherfile.txt
等等…
我想tar.gz所有的人。
我试过了:
$ grep -rl "123.45" . | tar -czf files.tar.gz
不起作用。 这就是我来这里的原因。 有任何想法吗? 谢谢。
刚试过这个,而且它在Ubuntu下工作,但在CentOS中我得到“tar:02:不能stat:没有这样的文件或目录”。
$ tar -czf test.tar.gz `grep -rl "123.45" .`
如果有其他人有更好的办法,让我知道。 至less在Ubuntu上面的工作很好。
喜欢这个:
... | tar -T - -czf files.tar.gz
“-T – ”导致tar从标准输入读取文件名。 第二个减号代表stdin。 –
grep -rl "123.45" . | xargs tar -czf files.tar.gz
焦油想知道什么文件处理,而不是通过标准输入文件的名称。
它确实有一个-T
/ --files-from
选项。 所以我建议使用这个。 输出你选择的文件列表到一个临时文件,然后有tar读取,如下所示:
T=$(mktemp) grep -rl "123.45" . > $T tar cfz files.tar.gz -T $T rm -f $T
如果你愿意,你也可以使用shell扩展来做到这一点:
tar cfz files.tar.gz -- $(grep -rl "123.45" .)
但是,如果你有太多的文件,或者如果有任何文件有奇怪的名字(如空间等),这将失败。