批量修改文件名中的数字:移除、添加及替换方法求助
批量修改文件名中的数字:移除、添加及替换方法求助
嘿,我来帮你搞定这个批量改文件名的问题!你提到的几个需求——移除数字、添加固定数字、递增替换数字,用shell脚本就能轻松解决,下面分情况给你一步步说明:
一、移除文件名中的数字(比如Apple1.sh → Apple.sh)
你之前找到的sed命令只是输出结果,没有实际重命名,只需要把echo的结果传给mv命令就能完成改名啦。
如果要移除文件名里所有数字(不管位置),用这个脚本:
for i in *.sh; do # 用sed删除所有数字字符 new_name=$(echo "$i" | sed 's/[0-9]//g') # 执行重命名 mv "$i" "$new_name" done
如果你的数字只在文件名末尾(比如都是Apple1.sh、Banana2.sh这种格式),可以用更精准的匹配,避免误删开头的数字:
for i in *.sh; do # 只删除.sh前面的数字 new_name=$(echo "$i" | sed 's/[0-9]\.sh$/.sh/') mv "$i" "$new_name" done
小贴士:测试的时候可以先把
mv "$i" "$new_name"改成echo "将 $i 改为 $new_name",确认输出的新文件名没问题后,再换成实际的mv命令哦!
二、给文件名添加固定数字(比如Apple.sh → Apple3.sh)
要给所有.sh文件名的末尾(后缀前)加上固定数字,比如3,用这个脚本:
for i in *.sh; do # 捕获.sh前面的部分,拼接数字3后再加.sh new_name=$(echo "$i" | sed 's/\(.*\)\.sh/\13.sh/') mv "$i" "$new_name" done
这个命令会把Apple.sh变成Apple3.sh,Banana.sh变成Banana3.sh,完全符合你的需求~
三、批量替换数字(比如Apple3.sh → Apple4.sh,数字加1)
这种需要对数字做算术运算,sed搞不定,我们可以用grep提取数字,再用shell的算术功能处理:
for i in *.sh; do # 提取文件名的字母前缀(比如Apple、Banana) prefix=$(echo "$i" | grep -o '^[a-zA-Z]*') # 提取文件名中的数字部分(比如3、4) num=$(echo "$i" | grep -o '[0-9]*') # 提取后缀(.sh) suffix=$(echo "$i" | grep -o '\.sh$') # 数字加1 new_num=$((num + 1)) # 拼接成新文件名 new_name="${prefix}${new_num}${suffix}" # 执行重命名 mv "$i" "$new_name" done
这个脚本会把Apple3.sh改成Apple4.sh,Banana3.sh改成Banana4.sh,完美实现数字递增替换。
备注:内容来源于stack exchange,提问作者God of Money
相关产品推荐
相关产品推荐

