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

Linux下递归重命名子文件夹中同名CSV文件的脚本求助

递归重命名并合并子目录中的spreadsheet.csv文件

原脚本的核心问题是无法递归遍历子目录,且使用ls遍历文件存在安全隐患(比如文件名含空格/特殊字符时会出错),同时rename的变量替换写法有误。以下是两种实用的改进方案:

方案1:重命名并合并到指定目录(推荐)

这个方案会把所有子目录中的spreadsheet.csv重命名为worksheet1.csv、worksheet2.csv...并统一移动到目标目录,直接完成合并需求:

# 初始化计数器
count=1
# 定义合并后的目标目录(可根据需求修改路径)
target_dir="./merged_worksheets"
# 创建目标目录(不存在则自动创建)
mkdir -p "$target_dir"

# 递归查找所有子目录中的spreadsheet.csv文件
find . -type f -name "spreadsheet.csv" | while read -r file_path; do
    # 移动并重命名文件到目标目录
    mv "$file_path" "${target_dir}/worksheet${count}.csv"
    # 计数器自增
    ((count++))
done

关键说明:

  • find . -type f -name "spreadsheet.csv":递归遍历当前目录下所有名为spreadsheet.csv的普通文件
  • while read -r file_path:安全读取文件路径,完美处理带空格或特殊字符的文件名
  • mkdir -p "$target_dir":确保目标目录存在,-p参数会自动创建不存在的上级目录
  • 若担心覆盖目标目录中已存在的文件,可给mv添加-n参数(mv -n ...),避免强制覆盖

方案2:原地递归重命名(仅修改文件名,不移动)

如果不需要合并到同一目录,只想把每个子目录中的spreadsheet.csv原地重命名为worksheetN.csv,可使用以下脚本:

count=1
find . -type f -name "spreadsheet.csv" | while read -r file_path; do
    # 获取文件所在的目录路径
    file_dir=$(dirname "$file_path")
    # 原地重命名文件
    mv "$file_path" "${file_dir}/worksheet${count}.csv"
    ((count++))
done

测试建议

在实际执行脚本前,可把mv替换为echo mv,先打印出要执行的命令,确认路径和重命名规则符合预期:

echo mv "$file_path" "${target_dir}/worksheet${count}.csv"

内容的提问来源于stack exchange,提问作者Rafael Salgado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:20:43