linux中xargs配合tar批量打包的核心是将动态文件列表转为tar参数,支持按模式独立打包、读文件列表整合打包、结合find安全打包及排除指定目录打包四种典型场景。

Linux 中用 xargs 配合 tar 批量打包,核心是把“一堆文件名”变成 tar 命令的参数。它特别适合处理动态生成的文件列表(比如按条件筛选、从文件读取、或遍历结果),比手动写多个文件名更灵活可靠。
按文件名模式批量打包每个文件为独立 tar 包
例如当前目录下有 a.txt、b.log、c.conf,想让每个文件单独打成 a.txt.tar、b.log.tar 等:
ls *.* | xargs -I {} tar -cf {}.tar {}
说明:
- ls *.* 列出所有带点的文件(避免匹配目录)
- -I {} 表示把每行输入替换成 {},确保每个文件单独调用一次 tar
- 注意:不能用 -n1 替代 -I,否则空格多的文件名会出错
从文件列表中读取路径并打包成一个 tar 包
当你已有明确要打包的文件清单(如 filelist.txt,每行一个相对路径):
cat filelist.txt | xargs -d '\n' tar -czf archive.tar.gz
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
说明:
- -d '\n' 明确以换行符分隔,防止文件名含空格时断裂
- tar -czf 直接接收 xargs 传入的所有路径,打包压缩为 archive.tar.gz
- 要求 filelist.txt 中的路径相对于当前工作目录有效
配合 find 批量打包指定类型文件
比如把当前目录下所有 .py 文件打包进一个压缩包:
find . -name "*.py" -type f -print0 | xargs -0 tar -czf scripts.tar.gz
说明:
- -print0 和 -0 配对使用,用 \0 分隔路径,彻底规避空格、换行等特殊字符问题
- -type f 确保只处理普通文件,跳过目录或符号链接
- 这是最健壮的组合方式,推荐用于生产环境
排除某些文件后打包剩余内容
如果想打包当前目录下除 temp/ 和 logs/ 外的所有子目录:
ls -d */ | grep -vE "(temp/|logs/)" | xargs -I {} tar -czf {}.tar.gz {}
说明:
- ls -d */ 列出所有子目录(结尾带 /)
- grep -vE 排除匹配项,注意正则里加了斜杠保持语义准确
- 每个保留的目录名(如 src/)会被 {} 替换,生成 src/.tar.gz










