[怎樣批量打包]如何进入 /media/ubunto/SHARE/batocera 目录 把里面的每个文件夹单独打成一个 7z 包 包名就是文件夹名(比如 bios.7z) 遇到同名包会自动覆盖
如何进入 /media/ubunto/SHARE/batocera 目录 把里面的每个文件夹单独打成一个 7z 包 包名就是文件夹名(比如 bios.7z) 遇到同名包会自动覆盖
================================================
sudo sh -c '整条全部放里面' =======================================
一条完整的命令,复制到终端里就能用,实现你要的效果:
进入/media/ubunto/SHARE/batocera目录
把里面的每个文件夹单独打成一个 7z 包
包名就是文件夹名(比如bios.7z)
遇到同名包会自动覆盖
加上了跳过rom1s文件夹的限制,其他逻辑不变:
打包(跳过 roms)
✅ 最终正确命令(独立打包 + 跳过rom1s+ 带 sudo)
我给你讲清楚这次为什么能行
你之前遇到的问题(为什么会打成一个包)
===========================
下面的命令文件也會單獨打包
(下面的不是文件夾,文件也會單獨打包)
打包(跳过 roms)
解压
========================
================================================================
一条完整的命令,复制到终端里就能用,实现你要的效果:
进入/media/ubunto/SHARE/batocera目录
把里面的每个文件夹单独打成一个 7z 包
包名就是文件夹名(比如bios.7z)
遇到同名包会自动覆盖
1. 一键执行的完整命令
=================================================================================
cd /media/ubunto/SHARE/batocera && for d in */; do dir="${d%/}"; 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; done
========================
{cd /media/ubunto/SHARE/batocera && for d in */; do dir="${d%/}"; 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; done }
2. 命令拆解(方便你理解)
表格
部分 作用
cd /media/ubunto/SHARE/batocera 先切换到你这个目标目录
for d in */; do 遍历当前目录下的所有文件夹
dir="${d%/}" 去掉文件夹末尾的/,拿到纯名字
7z a -t7z -m0=lzma2 -mx=9 -y 7z 打包参数:
-a表示添加 / 创建压缩包
-t7z指定格式为 7z
-m0=lzma2 -mx=9最高压缩率
-y自动覆盖同名文件,不会弹窗
"${dir}.7z" "$dir" 输出包名是文件夹名.7z,源是当前文件夹
3. 使用方法
把上面整条命令复制到你的 Ubuntu 终端里
回车执行,会自动开始打包
打包完成后,每个文件夹都会生成一个对应的.7z文件,比如bios.7z、cheats.7z等
4. 补充说明
如果你没装 7z,先执行这条安装:
bash
运行
sudo apt update && sudo apt install p7zip-full -y
打包后的文件会和文件夹在同一个目录里,不会跑到别的地方
遇到已经存在的包,会直接覆盖,不会问你要不要确认
========================================================================
现在正确的路径/media/ubunto/SHARE/改好了命令,其他逻辑完全不变:
bash
运行
cd /media/ubunto/SHARE && for d in */; do dir="${d%/}"; 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; done
说明
这个命令现在是进入/media/ubunto/SHARE目录,然后把里面所有文件夹(batocera、bios、cheats这些)分别打包成同名的.7z文件,会自动覆盖已有的包。
执行前确认你已经装了 7z,没装的话先跑这条:
bash
运行
sudo apt update && sudo apt install p7zip-full -y
需要我再给你一条反向解压命令,一键把这些.7z包恢复回原来的文件夹吗?
===============================================================================
加上了跳过roms文件夹的限制,其他逻辑不变:
bash
运行
cd /media/ubunto/SHARE && for d in */; do dir="${d%/}"; if [ "$dir" != "roms" ]; then 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; fi; done
{cd /media/ubunto/SHARE && for d in */; do dir="${d%/}"; if [ "$dir" != "roms" ]; then 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; fi; done}
说明
这条命令会:
进入/media/ubunto/SHARE目录
遍历所有文件夹
跳过名字为roms的文件夹
把剩下的所有文件夹(batocera、bios、cheats等)单独打成同名.7z包
遇到已存在的包会自动覆盖,不弹窗确认
需要我顺便给你一条只解压这些包、不碰roms文件夹的反向命令吗?
==================================================================================
分别对应 **「打包(跳过 roms)」和「解压恢复」**,逻辑和路径都给你固定好,直接复制就能用:
一、打包命令(跳过 roms 文件夹)
bash
运行
cd /media/ubunto/SHARE && for d in */; do dir="${d%/}"; if [ "$dir" != "roms" ]; then 7z a -t7z -m0=lzma2 -mx=9 -y "${dir}.7z" "$dir"; fi; done
作用:进入目标目录,把除了roms以外的所有文件夹,单独打成同名.7z包,自动覆盖已有文件。
二、解压恢复命令(只解压 7z 包,不碰 roms)
bash
运行
cd /media/ubunto/SHARE && for file in *.7z; do dir="${file%.7z}"; if [ "$dir" != "roms" ]; then 7z x -y "$file"; fi; done
作用:进入目标目录,把所有.7z包解压出来,恢复成原来的文件夹结构,自动覆盖同名文件,且不会处理roms.7z(就算误生成了也会跳过)。
小提示:
如果你想在解压时顺便删除解压后的.7z包,可以用这个版本:
bash
运行
cd /media/ubunto/SHARE && for file in *.7z; do dir="${file%.7z}"; if [ "$dir" != "roms" ]; then 7z x -y "$file" && rm -f "$file"; fi; done
需要我再给你一条命令,专门用来检查所有打包文件和原文件夹的大小是否一致
=======================================================================
校验命令(核对原文件夹 vs 7z 包)
bash
运行
cd /media/ubunto/SHARE && for dir in */; do dir="${dir%/}"; if [ "$dir" != "roms" ] && [ -d "$dir" ] && [ -f "${dir}.7z" ]; then echo -e "\n=== 校验 $dir ==="; echo "原文件夹大小:"; du -sh "$dir"; echo "压缩包大小:"; du -sh "${dir}.7z"; echo "测试压缩包完整性:"; 7z t "${dir}.7z"; fi; done
命令说明
路径固定:自动进入/media/ubunto/SHARE目录。
跳过roms:和打包命令保持一致,不处理roms文件夹。
双重校验:
大小对比:先显示原文件夹和压缩包的大小,确认文件存在且大小合理。
完整性测试:用7z t命令直接测试压缩包是否损坏、能否正常解压。
结果清晰:每个文件夹的校验结果都会用=== 校验 文件夹名 ===隔开,一目了然。
补充说明
如果7z t输出Everything is Ok,说明压缩包完好无损。
如果提示错误,说明打包过程中出了问题,需要重新执行打包命令。
需要我再给你一条一键清理所有.7z包(不碰roms)的命令吗?
===================================================