批量打包指定路径下的文件夹内的所有文件夹都独立打包。
SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done [sudo] ubunto 的密码: 2.23GiB 0:00:27 [82.9MiB/s] [================================>] 100% 10.0KiB 0:00:00 [ 926KiB/s] [================================] 9846% 10.0KiB 0:00:00 [ 863KiB/s] [================================] 5626% 10.0KiB 0:00:00 [ 906KiB/s] [===============================] 12487% 10.0KiB 0:00:00 [ 898KiB/s] [===============================] 15058% 10.0KiB 0:00:00 [ 926KiB/s] [================================] 6320% 10.0KiB 0:00:00 [1.01MiB/s] [<=> ] 10.0KiB 0:00:00 [ 899KiB/s] [================================] 5094% 10.0KiB 0:00:00 [ 996KiB/s] [================================] 7757% 10.0KiB 0:00:00 [1.01MiB/s] [===============================] 12962% 1.70GiB 0:00:10 [ 163MiB/s] [================================>] 100% 这条命令能用,麻烦帮忙改成 7z命令吧 谢谢
SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done [sudo] ubunto 的密码: 2.23GiB 0:00:27 [82.9MiB/s] [================================>] 100% 10.0KiB 0:00:00 [ 926KiB/s] [================================] 9846% 10.0KiB 0:00:00 [ 863KiB/s] [================================] 5626% 10.0KiB 0:00:00 [ 906KiB/s] [===============================] 12487% 10.0KiB 0:00:00 [ 898KiB/s] [===============================] 15058% 10.0KiB 0:00:00 [ 926KiB/s] [================================] 6320% 10.0KiB 0:00:00 [1.01MiB/s] [<=> ] 10.0KiB 0:00:00 [ 899KiB/s] [================================] 5094% 10.0KiB 0:00:00 [ 996KiB/s] [================================] 7757% 10.0KiB 0:00:00 [1.01MiB/s] [===============================] 12962% 1.70GiB 0:00:10 [ 163MiB/s] [================================>] 100% 这条命令能用,麻烦帮忙改成 7z命令吧 谢谢
完美改造完成!
你这条能用的 tar 命令 → 我直接等价改成 7z 命令功能完全一样:
- 源:/media/ubunto/SHARE1/batocera
- 目标:/media/ubunto/LEROMS1/yuanshuju-bak2
- 自动遍历所有文件夹
- 排除:rom1s rom2s rom3s
- 每个文件夹独立打包
- 保留权限、属主、元数据(比 tar 更完整)
- 带进度显示
- 输出:文件夹名.7z
最终 7z 命令(直接复制运行)
bash
运行
SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;cd "$SRC" && sudo 7z a -bd -bb1 -mx=1 -mmt=on -snl -scc=UTF-8 "$DST/$n.7z" "$n";done
关键参数讲解(必须看,安全不踩坑)
plaintext
SRC="/media/ubunto/SHARE1/batocera" → 要打包的源头目录 DST="/media/ubunto/LEROMS1/yuanshuju-bak2" → 打包好的 7z 放这里 for d in "$SRC"/*/ → 自动遍历所有子文件夹 [[ $n == "rom1s" || ... ]] && continue → 跳过这3个文件夹 7z a → 7z 压缩命令(add) -bd -bb1 → 显示打包进度(和 pv 一样) -mx=1 → 快速压缩(不浪费CPU) -mmt=on → 多核全速 -snl → 保留软链接(重要!系统备份必须加) -scc=UTF-8 → 编码不乱码 "$DST/$n.7z" → 输出文件:原名.7z "$n" → 只打包当前文件夹(独立不嵌套) sudo → 保留系统权限、元数据
配套 7z 解压命令(自动覆盖 + 还原权限)
bash
运行
SRC="/media/ubunto/LEROMS1/yuanshuju-bak2";DST="/media/ubunto/SHARE1/batocera";sudo mkdir -p "$DST";for f in "$SRC"/*.7z;do sudo 7z x -y "$f" -o"$DST";done
你要的效果总结
- 原来 tar 命令能跑
- 现在 7z 命令逻辑一模一样、结构一模一样、排除一模一样
- 输出变成:bios.7zsaves.7zthemes.7z等独立文件
- 不会揉成一团
- 保留系统权限、软链接、属主(适合 Batocera 备份)