You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash脚本批量修改文件夹名称出现异常结果求助

问题原因

文件夹名称末尾的$\r是Windows风格的回车符(CR)——你的exceltest.csv是在Windows环境下生成的,行尾采用CRLF(\r\n)格式,而Linux系统默认用LF(\n)作为行尾分隔符。Bash的read命令读取时会保留行尾的\r,导致newStr变量带上这个不可见控制字符,最终重命名后的文件夹名包含\r。GUI通常自动忽略这类控制字符所以显示正常,但CLI会将其转义为$\r。

解决方法

1. 先修复CSV文件的行尾格式

直接把CSV转换成Linux兼容的LF格式,用以下命令之一:

  • 安装dos2unix工具后转换:
    sudo apt install dos2unix
    dos2unix exceltest.csv
    
  • 用sed命令直接替换行尾的\r:
    sed -i 's/\r$//' exceltest.csv
    

2. 在脚本中处理变量(无需修改CSV文件)

在read命令之后,立即去除newStr末尾的\r,同时修复原脚本的find参数错误:

dir='/home/company/customer'

while IFS=, read -r oldStr newStr; do
    # 去除newStr末尾的回车符
    newStr=${newStr%$'\r'}
    # 修复find参数:-maxdepth无空格,execdir用相对路径更准确
    find "$dir" -type d -name "$oldStr" -maxdepth 1 -execdir mv -n "$oldStr" "$newStr" \;
done < exceltest.csv

原脚本的额外错误说明

  • -max depth 应为 -maxdepth(参数名无空格)
  • execdir 执行时当前目录是目标文件夹的父目录,用相对路径$oldStr/$newStr比绝对路径更准确,避免路径冗余
后续影响说明

如果不修复,带\r的文件夹名会导致后续脚本操作(查找、遍历、重命名)出错——脚本匹配名称时无法识别带隐藏\r的文件夹。修复后即可完全避免这类问题。

内容的提问来源于stack exchange,提问作者Trevor McDaniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:27:14