找到我想要的文件,但是 xargs 和 Tar 的管道却没有

找到我想要的文件,但是 xargs 和 Tar 的管道却没有

我正在使用以下命令行:

find . -mtime -15 -mtime 0  -print0 | xargs -0  tar cjvf /home/user/adjuntos.tar.bz2

管道的左侧工作正常,但管道的右侧却从目录中获取所有文件。

我不知道我做错了什么。你能帮帮我吗?

答案1

您的find命令可能.也会列出(mtime可能.与最近修改的文件相同),这导致当前目录被 tar 包含。

如果您只想包含常规文件而不包含目录,则可以使用-type fwith find

答案2

除 之外-type f,不需要xargs,一个简单的-exec方法也同样有效:

find . -mtime -15 -mtime 0  -exec tar cjvf /home/user/adjuntos.tar.bz2 {} +

{} +意思是“所有匹配的文件放在一起”)

笔记:
  • 无论您使用find -exec {}+find | xargs,单个命令(用于检查)处理的参数都是有限制的xargs --show-limits:在我的 Linux 上大约 2Mbytes,10K 个文件的平均路径长度为 200 字节。
  • 如果文件列表的总长度超出此限制,则findxargs都会将参数列表切成较小的部分,并多次调用该命令
  • tar -cf 覆盖文件:如果多次调用,最终的存档将只包含最后一次调用的文件。
  • 要获得完整的档案,您必须使用tar -r以便调用附加到现有档案而不是覆盖它(当然,如果在开始之前档案存在,您必须删除它),但您不能-r与压缩档案一起使用。

相关内容