如何在mkisofs成功生成ISO镜像后自动删除对应源文件夹
问题描述
批量处理多文件夹生成ISO镜像时,需要满足如下规则:
某文件夹对应ISO镜像生成成功后,立即删除该源文件夹,即:folder1 成功生成 folder1.iso 后,删除 folder1
现有批量生成ISO的Shell脚本未实现上述自动删除逻辑,原脚本如下:
for p in *; do ( cd "$p" && for d in */; do mkisofs -allow-limited-size -l -J -r -l -iso-level 3 -o "${d%/}.iso" "$d"; done ); done
修改后脚本
核心逻辑是仅在mkisofs命令执行成功(返回退出状态码0)时才执行源文件夹删除操作,同时补充异常场景容错处理,避免误删文件,修改后代码如下:
for p in *; do ( # 跳过非目录项,cd失败时直接终止当前子shell逻辑 if [ -d "$p" ]; then cd "$p" || exit 1 for d in */; do # 移除原命令重复传入的-l参数,执行ISO生成 mkisofs -allow-limited-size -l -J -r -iso-level 3 -o "${d%/}.iso" "$d" # 仅当ISO生成成功时,删除对应源文件夹 if [ $? -eq 0 ]; then rm -rf -- "$d" fi done fi ); done
关键修改说明
- 增加外层目录校验:遍历到的
$p如果不是目录直接跳过,同时cd操作失败时立刻退出当前子shell,避免后续逻辑在错误路径执行导致文件误删 - 清理冗余参数:移除了原
mkisofs命令中重复传入的-l参数 - 增加执行结果校验:通过
$?获取mkisofs的退出状态,仅当命令执行成功(状态码为0)时才执行删除操作,避免ISO生成失败时丢失源文件夹数据 - 删除操作增加
--标识:兼容以-开头的文件夹名,避免rm将文件夹名识别为命令参数报错
内容的提问来源于stack exchange,提问作者Jack Rock
相关产品推荐
相关产品推荐

