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

如何使用Bash批量替换目录中的指定文件名?

批量替换指定目录中的文件名:两种可行方案

方法1:使用rename命令(推荐,最简洁)

rename是专门用于批量重命名的工具,直接支持Perl风格的字符串替换,语法直观高效:

# 进入目标目录
cd /home/towers

# 批量替换文件名中的`slo`为`dsd`(仅处理yaml后缀文件)
rename 's/slo/dsd/' *.yaml

如果想先预览替换效果(不实际修改文件名),可以添加-n参数:

rename -n 's/slo/dsd/' *.yaml

方法2:用sed配合Bash循环(兼容无rename的系统)

如果你的系统没有预装rename工具,也可以通过sed解析文件名,结合Bash循环完成替换:

cd /home/towers

# 遍历所有yaml文件,逐个重命名
for file in *.yaml; do
    new_name=$(echo "$file" | sed 's/slo/dsd/')
    # 跳过无需修改的文件(避免无效操作)
    if [ "$file" != "$new_name" ]; then
        mv "$file" "$new_name"
    fi
done

扩展:递归处理子目录文件

如果需要同时修改子目录中的目标文件,可以结合find命令:

用rename递归处理

find /home/towers -type f -name "*.yaml" -exec rename 's/slo/dsd/' {} \;

用sed+循环递归处理

find /home/towers -type f -name "*.yaml" | while read -r file; do
    new_file=$(echo "$file" | sed 's/slo/dsd/')
    if [ "$file" != "$new_file" ]; then
        mv "$file" "$new_file"
    fi
done

注意事项

  • 执行重命名前建议先备份文件,避免误操作导致数据丢失;
  • 如果文件名包含特殊字符(如空格),上述命令依然适用(已用双引号包裹变量)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:27