如何使用tar与pigz单独将各子文件夹压缩为tar.gz文件?
子目录独立打包为tar.gz(使用tar+pigz)
首先确认你的环境已经安装pigz工具,主流发行版可以直接通过包管理器安装,比如Debian/Ubuntu执行apt install pigz,CentOS/RHEL执行yum install pigz。
基础命令(仅打包一级可见子目录)
先切换到你的目标根目录下,执行以下命令即可遍历所有一级子文件夹,分别生成对应的文件夹名.tar.gz压缩包:
for dir in */; do tar -I pigz -cf "${dir%/}.tar.gz" "$dir"; done
参数说明:
-I pigz:指定tar调用多线程压缩工具pigz执行gzip压缩,相比默认单线程gzip可大幅提升压缩速度${dir%/}:去除变量dir末尾的路径分隔符,避免生成的压缩包名携带多余斜杠-c:创建新的归档文件-f:指定输出的压缩包文件名
如果需要打包包含.开头的隐藏子目录,先执行以下命令开启bash的dotglob选项后再运行上述打包命令:shopt -s dotglob
无需切换目录的写法
如果不想提前切换到目标根目录,可以直接指定目标路径:
target_dir="/你的/目标/根目录路径" for dir in "$target_dir"/*/; do dir_name=$(basename "$dir") tar -I pigz -cf "$target_dir/${dir_name}.tar.gz" -C "$target_dir" "$dir_name" done
其中-C "$target_dir"的作用是切换到目标根目录后再执行打包,避免压缩包内的文件携带冗余的绝对路径层级。
常用自定义调整
- 调整压缩等级:pigz支持1(最快速度,压缩率最低)到9(最高压缩率,速度最慢)的等级,默认等级为6,需要调整时修改
-I参数即可,例:-I 'pigz -9' - 保留文件权限与属性:给tar命令添加
-p参数,即可完整保留原文件的权限、所有者、软链接等属性 - 排除指定文件:添加
--exclude参数过滤不需要打包的内容,例:排除所有.log后缀文件可写为tar -I pigz -cf xxx.tar.gz --exclude='*.log' xxx/
压缩包校验
打包完成后可执行以下命令查看压缩包内的文件结构,确认打包结果正确:tar -I pigz -tf 待检查的压缩包名.tar.gz
内容的提问来源于stack exchange,提问作者bnqtoan
相关产品推荐
相关产品推荐

