最后更新时间:2021-04-22
重现步骤如下:
现有的目录结构:
├── source
│ └── source.txt
├── target
cp -r source target1 //target1 dir not exists
GUN/BSD |
├── source
│ └── source.txt ├── target └── target1 └── source.txt |
cp -r source target //target dir exists
GUN/Linux | BSD(MacOS) |
├── source
│ └── source.txt ├── target └── source └── source.txt |
├── source
│ └── source.txt ├── target │ └── source.txt |
测试环境:
GNU coreutils 8.22(CentOS)
GNU coreutils 8.30(Ubuntu 20.04)
BSD macOS Catalina 10.15.7
总结/Summary:
使用cp -r source target 复制目录时,如果目标目录不存在,则GUN/Linux&BSD(mac OS)的cp行为一致;如果目录已经存在,则BSD(mac OS)下会和目标目录不存在时行为一致,但是GUN的cp会创建在目标目录下创建子目录。
PS:
如果目标目录已经存在,可以使用 cp -r source/. target (GUN/Linux下target目录存在or不存在都支持,BSD(mac OS)下target目录存在or不存在都支持) or cp -r source/* target(仅适用于GUN/Linux下target目录存在的情况,BSD(mac OS)下语法错误)
所以简单起见:直接使用cp -r source/. target。GUN/Linux和BSD(mac OS)都支持,并且target目录存不存在都支持。