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

Linux下依据空格分隔文本文件重命名子目录文件及文件夹咨询

原有命令局限性

你当前使用的xargs -r -a files.txt -L1 mv仅会逐行读取映射文件的两个参数直接执行移动操作,没有匹配处理子目录内文件的逻辑,因此只能完成根目录文件夹的重命名,无法处理子目录内带前缀的文件。

实现方案

注意必须先重命名子目录内的目标文件,再修改上层目录名称,避免重命名目录后找不到对应路径下的文件
你可以使用如下bash脚本完成需求:

#!/bin/bash
# 逐行读取映射文件
while read -r old_dir new_dir; do
    # 校验旧目录存在再执行操作
    if [ -d "$old_dir" ]; then
        # 第一步:递归重命名该目录下所有带旧目录名前缀的文件
        find "$old_dir" -type f -name "${old_dir}*" | while read -r file_path; do
            # 提取原始文件名
            file_name=$(basename "$file_path")
            # 替换文件名中的旧目录前缀为新前缀
            new_file_name="${file_name/$old_dir/$new_dir}"
            # 执行文件重命名
            mv "$file_path" "${old_dir}/${new_file_name}"
        done
        # 第二步:重命名根目录下的文件夹
        mv "$old_dir" "$new_dir"
    fi
done < files.txt
使用步骤
  • 将上述代码保存为batch_rename.sh,和你的files.txt放在同一级目录下
  • 给脚本添加执行权限:chmod +x batch_rename.sh
  • 预览验证操作(必做,避免误操作):将脚本中两个mv命令前都加上echo,执行脚本后会打印所有要执行的重命名操作,确认操作符合预期后再去掉echo
  • 正式执行脚本:./batch_rename.sh
注意事项
  • 执行操作前建议先备份目标目录和文件,避免误操作导致数据丢失
  • 如果需要匹配的旧目录名不是出现在文件名前缀,可以调整find的-name匹配规则和字符串替换逻辑
  • 如果需要处理子目录下的子文件夹而非仅文件,可以修改find的-type f参数为-type f -o -type d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:42:01