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

Bash如何实现复制文件夹到所有子目录并按上级目录名重命名

带空格目录的批量操作解决方案

问题根源

你当前脚本执行失败的核心原因有两个:

  • 双引号已经可以保证路径中空格的字面含义,你在引号内额外加的\转义符会被系统识别为路径的一部分,导致无法找到目标文件
  • for d in */遍历得到的目录名默认自带末尾的/,拼接路径时不需要额外补充斜杠

修复后可直接运行的脚本

#!/bin/bash
# 遍历当前目录下所有一级子目录
for d in */; do
    # 去除目录名末尾的斜杠,方便后续拼接字符串
    pure_dirname="${d%/}"
    # 复制源文件夹到目标子目录,双引号自动兼容路径空格
    cp -R ../"Foobar Project" "$d"
    # 重命名复制得到的文件夹
    mv -- "$d/Foobar Project" "$d/${pure_dirname} Project"
    # 重命名内部的Foobar.file文件
    mv -- "$d/${pure_dirname} Project/Foobar.file" "$d/${pure_dirname} Project/${pure_dirname}.file"
done

注意事项

执行脚本前建议先做校验:

  1. 确认当前工作目录为My Projects,上级目录存在Foobar Project文件夹和内部的Foobar.file
  2. 可以先在cp和mv命令前加echo试运行,检查输出的路径是否符合预期,确认无误后再去掉echo正式执行
  3. 命令中的--用于适配目录名以-开头的极端场景,避免系统将目录名识别为命令参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:02