求Bash脚本:批量将一级目录下二级文件/文件夹单独压缩为高压缩率7z包
批量二级对象独立7z压缩Bash脚本
前置依赖
- 需提前安装p7zip压缩工具:
- Debian/Ubuntu 系发行版:
sudo apt install p7zip-full - RHEL/CentOS/Fedora 系发行版:
sudo dnf install p7zip p7zip-plugins - macOS(Homebrew环境):
brew install p7zip
- Debian/Ubuntu 系发行版:
脚本代码
#!/bin/bash # -------------------------- 自定义配置区 开始 -------------------------- # 一级根目录路径,需替换为你的实际路径 SOURCE_DIR="/e/Path/To Parent Folder" # 压缩包输出存储路径,需替换为你的实际路径 OUTPUT_DIR="/g/Path/To Archive Folder" # 7z压缩等级,1=最快压缩率最低,9=最慢压缩率最高 COMPRESS_LEVEL=9 # 是否跳过已存在的压缩包,true=跳过,false=覆盖 SKIP_EXIST=true # -------------------------- 自定义配置区 结束 -------------------------- # 检查源目录是否存在 if [ ! -d "$SOURCE_DIR" ]; then echo "错误:源目录 $SOURCE_DIR 不存在" exit 1 fi # 创建输出目录(不存在时自动创建) mkdir -p "$OUTPUT_DIR" # 遍历源目录下所有二级对象(文件+文件夹) for item in "$SOURCE_DIR"/*; do # 跳过不存在的匹配项(空目录场景) [ -e "$item" ] || continue # 提取二级对象的名称(不含父路径) item_name=$(basename "$item") # 拼接输出压缩包完整路径 output_archive="$OUTPUT_DIR/${item_name}.7z" # 跳过已存在的压缩包(配置开启时) if [ "$SKIP_EXIST" = true ] && [ -f "$output_archive" ]; then echo "跳过已存在的压缩包:$output_archive" continue fi echo "正在压缩:$item_name" # 执行7z压缩命令 7z a -t7z -mx="$COMPRESS_LEVEL" -bb0 -bso0 "$output_archive" "$item" if [ $? -eq 0 ]; then echo "压缩完成:$output_archive" else echo "压缩失败:$item_name" fi done
使用方法
- 修改脚本上方「自定义配置区」的
SOURCE_DIR为你的一级根目录路径,OUTPUT_DIR为你想要存放7z包的目标路径 - 给脚本赋予执行权限:
chmod +x batch_7z_compress.sh - 运行脚本即可自动完成批量压缩
注意事项
- 如果是Windows环境使用,可在WSL、Git Bash、Cygwin等兼容Bash的环境下运行,Windows路径按对应环境的规则书写即可(比如WSL下C盘路径为
/c/xxx,Git Bash同理) - 高压缩等级会消耗更多CPU和时间,如果你优先考虑压缩速度,可将
COMPRESS_LEVEL调整为5或3 - 脚本默认静默输出压缩过程,如需查看详细压缩日志,可删除7z命令中的
-bb0 -bso0参数
内容的提问来源于stack exchange,提问作者Fly
相关产品推荐
相关产品推荐

