Linux Bash下批量移除文件名倒数第二部分的重命名方法求助
批量移除文件名倒数第二部分的实现方案
方案1:直接使用util-linux的rename工具
针对你的场景(文件名以.csv结尾,需移除最后两个点之间的内容),util-linux自带的rename工具可以通过通配符匹配快速实现:
rename -v '*.*.csv' '*.csv' *.csv
-v:显示每一步的重命名操作,方便验证结果- 逻辑:
*.*.csv匹配所有包含至少两个点且以.csv结尾的文件,替换时保留第一个*匹配的前缀部分,直接拼接.csv,自动移除最后两个点之间的倒数第二部分
方案2:bash循环+参数扩展(通用场景)
如果你的文件后缀不固定,或者需要更精准的控制,用bash内置的参数扩展功能更可靠:
for file in *.csv; do [ -f "$file" ] || continue # 跳过非文件类型(如目录) prefix=${file%.*} # 去掉最后一个点及之后的内容,得到倒数第二部分之前的前缀 new_prefix=${prefix%.*} # 再去掉一次,彻底移除倒数第二部分 suffix=${file##*.} # 提取文件后缀 new_file="${new_prefix}.${suffix}" mv -n "$file" "$new_file" # -n 避免覆盖已存在的文件,预览时保留,执行时可移除 done
- 优势:支持含空格的文件名,不受后缀限制,只要文件名包含至少两个点就能正确处理
- 预览验证:先运行带
-n的命令,确认重命名结果符合预期后,再去掉-n执行实际操作
内容的提问来源于stack exchange,提问作者trid3
相关产品推荐
相关产品推荐

