如何将指定目录子文件夹下的指定名称文件打包为Tar包
打包找到的文件为Tar包
没问题,你已经成功定位到要打包的文件了,只需要把文件列表传递给tar命令就能完成打包任务。这里有几种简单的实现方式:
方法1:通过xargs直接传递文件路径
直接在你现有命令的基础上,用xargs把找到的文件路径传给tar:
find /logs/ -name app-2018 -execdir realpath "{}" ';' | xargs -I p find p -name stdout | xargs tar -cvf my_output.tar
-c:创建新的Tar包-v:显示打包的详细过程(可选,去掉后会静默执行)-f my_output.tar:指定输出的Tar包文件名,你可以改成自己想要的名字
方法2:用Tar的-T选项从标准输入读取文件列表
这种方式更简洁,不需要额外的xargs,直接让tar从管道读取文件路径:
find /logs/ -name app-2018 -execdir realpath "{}" ';' | xargs -I p find p -name stdout | tar -cvf my_output.tar -T -
这里的-T -表示从标准输入(也就是前面命令的输出)读取要打包的文件路径。
处理含特殊字符的文件名(可选)
如果你的文件名里包含空格、换行符或者其他特殊字符,建议用-print0和--null选项来避免错误:
find /logs/ -name app-2018 -execdir realpath "{}" ';' | xargs -I p find p -name stdout -print0 | tar -cvf my_output.tar --null -T -
-print0让find用空字符分隔文件名,--null让tar识别这种分隔方式,确保所有文件都能被正确处理。
执行完命令后,你就能得到包含目标文件的Tar包啦!
内容的提问来源于stack exchange,提问作者smishra




