如何仅重命名不匹配指定模式的文件,避免重复追加-renamed后缀?
解决方案
核心是在循环中增加判断,跳过已包含-renamed标识的文件,同时优化脚本兼容性,避免特殊文件名导致报错。
适配原写法的修改版(和原有逻辑对齐,易理解)
# 处理jpg格式文件 for f in *.jpg; do # 文件名已带-renamed后缀则直接跳过 [[ $f == *-renamed.jpg ]] && continue mv -- "$f" "${f%.jpg}-renamed.jpg" done # 处理mp4格式文件 for f in *.mp4; do [[ $f == *-renamed.mp4 ]] && continue mv -- "$f" "${f%.mp4}-renamed.mp4" done
简洁合并版(一次处理两种格式)
# 开启shell扩展通配符支持 shopt -s extglob # 遍历所有主体不带-renamed的jpg、mp4文件 for f in !(*-renamed).@(jpg|mp4); do # 无匹配文件时跳过无效循环 [ -f "$f" ] || continue # 拆分文件名和后缀 file_suffix=${f##*.} file_name=${f%.*} mv -- "$f" "${file_name}-renamed.${file_suffix}" done
两个版本重复执行都不会出现重复追加后缀的问题,也兼容带空格、特殊字符、以-开头的文件名场景。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

