如何使用 find 收集所有“txt”和“log”文件?

如何使用 find 收集所有“txt”和“log”文件?

我目前有这个脚本:

find . -iname '*.log' -print0 | xargs -0 tar zcf $file

从给定目录中收集所有“*.log”文件。我想修改它以包括所有“.txt”文件,但我不知道该怎么做,这应该相当简单,对吧?

答案1

这几乎与 Raphael B. 的答案相同,但也可以处理超出最大参数长度的情况。我们只需告诉 tar 从 stdin(没有限制)读取要存档的文件名,而不是将它们作为参数即可:

find . \( -iname "*.log" -o -iname "*.txt" \) -print0 | tar --null --files-from=- -zcf "$file"

请注意,这是 GNU 特有的。其他 UNIX 或类 UNIX 系统上的 tar 无法理解--null,但 Ubuntu 中的 tar 是 GNU tar,因此它可以在那里正常工作。

答案2

你走对了路。试试这个:

find . \( -iname "*.log" -or -iname "*.txt" \) -print0 | xargs -0 tar zcf $file

答案3

以下是对 xargs 无用使用的答案:

find \( -name "*.log" -or -name "*.txt" \) -exec tar zcf archiv2 {} + 

我没有对很多文件进行测试——如果发现失败,我会很高兴收到一条评论和数字。

伪参数,您需要记住将 -delete 放在最后:嗯,是的,您也必须记住将 | xargs ... 放在最后,不是吗?

答案4

find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

您可以'.*\.(log|txt)'用任何替换POSIX 扩展正则表达式。

该示例匹配:

任意数量的任意字符

然后是'。'

然后是“log”或“txt”

相关内容