按日期打包tar文件异常:为何find筛选的文件未被正确打包?
问题原因与解决方法
你的操作失误在于同时使用了xargs和tar的-T -选项传递文件列表,二者逻辑冲突,导致tar错误打包了当前目录所有文件:
tar -T -的作用是让tar从标准输入读取要打包的文件路径xargs会把find的输出转换成tar的命令行参数,此时标准输入已经没有内容- 当
tar通过-T -读取不到任何文件路径时,会默认打包当前目录下的所有文件
正确的两种实现方式
方式一:直接让find输出传给tar的-T选项(推荐)
这种方式能完美处理含空格、换行的特殊文件名,且不会出现参数过多的问题:
find -mtime 0 -print0 | tar -zcvf teste.tar.gz --null -T -
-print0:让find用空字符分隔输出的文件路径--null:告诉tar用空字符作为路径分隔符,对应find的-print0
方式二:用xargs但不使用-T选项
如果要使用xargs,需去掉-T -,同时同样处理特殊字符:
find -mtime 0 -print0 | xargs -0 tar -zcvf teste.tar.gz
注意:如果匹配的文件数量极多,xargs会分多次调用tar,后续调用会覆盖之前生成的teste.tar.gz,因此这种方式不如第一种可靠。
内容的提问来源于stack exchange,提问作者Anderson Silvestre
相关产品推荐
相关产品推荐

