如何在linux中使用find命令和exec和grep

时间:2016-12-08 18:36:38

标签: bash

我需要查找具有特定字符串的所有文件并对其进行tar。我使用了以下语法,但它不起作用。

find . -iname '*.log' -exec grep -l 'abcdef' {} tar mytar.tar.gz -T - \;

我不想使用下面的管道语法(出于特定原因)

find . -name '*.log' | xargs grep -l 'abcdef' | tar Mytar.tar.gz -T -

我需要使用find with exec和grep每个文件并对结果文件列表进行tar。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用grep -lR --null管道xargs -0 tar ...进行此操作:

grep -lR --null --include='*.log' 'abcdef' . | xargs -0 tar cvzf mytar.tar.gz -T -

答案 1 :(得分:1)

如果你讨厌管道,

Process substitution来救援:

tar -czf mytar.tar.gz -T <(find . -type f -iname '*.log' -exec grep -l 'abcdef' {} +)