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

Linux shell中如何将多个目录分别批量复制到对应目标目录

问题场景

需要通过Shell命令行完成批量目录复制,初始目录结构如下:

Project
├── directory1
│   └── files1
├── directory2
│   └── files2
└── directory3
    └── files3

目标是为每个原目录生成带.copy后缀的副本目录,副本内文件与原目录完全一致,最终结构如下:

Project
├── directory1
│   └── files1
├── directory2
│   └── files2
├── directory3
│   └── files3
├── directory1.copy
│   └── files1
├── directory2.copy
│   └── files2
└── directory3.copy
    └── files3
错误原因

之前执行的命令:

mkdir directory{1..3}.copy 
cp -r directory{1..3} directory{1..3}.copy

没有达到预期的核心原因有两点:

  • Shell的大括号展开会在命令执行前完成,上述cp命令展开后实际执行的是cp -r directory1 directory2 directory3 directory1.copy directory2.copy directory3.copy
  • cp命令的语法规则为cp [参数] 源路径1 源路径2 ... 目标路径,即传入的所有路径中,只有最后一个会被识别为复制目标,其余全部被识别为待复制源。因此上述展开后的命令会把前5个路径全部作为源,递归复制到最后一个路径directory3.copy中,最终所有文件都堆积在该目录下。
正确实现方案

不需要提前创建.copy后缀的目标目录,直接通过循环逐个执行复制即可,命令如下:

for dir in directory{1..3}; do
  cp -r "$dir" "$dir.copy"
done
  • 该命令会遍历directory1、directory2、directory3三个目录,逐个将源目录完整复制为同名加.copy后缀的新目录
  • cp -r在目标路径不存在时,会自动创建对应目录,完全匹配文件结构要求
  • 提前执行mkdir创建目标目录反而会导致复制结果异常:如果目标目录已存在,cp -r会把源目录嵌套复制到目标目录内部,生成类似directory1.copy/directory1/files1的错误结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:39:29