CentOS7下批量重命名文件:替换文件名第3个下划线为冒号
批量重命名:仅替换文件名中第3个下划线
核心思路
要解决你的问题,关键是只修改文件名部分的下划线,不能碰路径里的字符,同时精准定位到第3个下划线做替换,而非全局替换。
可行脚本实现
方法1:用sed快速实现(最简洁)
直接切换到目标目录执行,或者在脚本里指定路径:
# 先进入目标目录 cd /home/application/Upload_Actions/TestFiles/ # 遍历目标文件,只替换第3个下划线 for f in *statsfile*.csv; do new_filename=$(echo "$f" | sed 's/_/:/3') mv "$f" "$new_filename" done
解释:sed 's/_/:/3' 是核心,它会精准匹配并替换字符串里的第3个下划线为冒号,完全符合你的需求。
方法2:不切换目录的版本
如果不想切换当前工作路径,可以拆分路径和文件名单独处理:
for f in /home/application/Upload_Actions/TestFiles/*statsfile*.csv; do # 拆分出文件所在目录和文件名 file_dir=$(dirname "$f") old_name=$(basename "$f") # 替换文件名的第3个下划线 new_name=$(echo "$old_name" | sed 's/_/:/3') # 拼接路径完成重命名 mv "$f" "$file_dir/$new_name" done
验证小技巧
执行重命名前,可以先把mv命令换成echo "$f" -> "$new_name",先预览所有文件的重命名结果,确认无误后再执行实际的移动操作,避免误改。
内容的提问来源于stack exchange,提问作者Paul C.
相关产品推荐
相关产品推荐

