我正在使用以下命令行:
find . -mtime -15 -mtime 0 -print0 | xargs -0 tar cjvf /home/user/adjuntos.tar.bz2
管道的左侧工作正常,但管道的右侧却从目录中获取所有文件。
我不知道我做错了什么。你能帮帮我吗?
答案1
您的find
命令可能.
也会列出(mtime
可能.
与最近修改的文件相同),这导致当前目录被 tar 包含。
如果您只想包含常规文件而不包含目录,则可以使用-type f
with 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 字节。 - 如果文件列表的总长度超出此限制,则
find
和xargs
都会将参数列表切成较小的部分,并多次调用该命令 tar -cf
覆盖文件:如果多次调用,最终的存档将只包含最后一次调用的文件。- 要获得完整的档案,您必须使用
tar -r
以便调用附加到现有档案而不是覆盖它(当然,如果在开始之前档案存在,您必须删除它),但您不能-r
与压缩档案一起使用。