使用现有符号链接以递归方式复制内容,以复制指向目标上的目录


mkdir -p source/{dir1,dir2}
touch source/a
touch source/dir1/b
touch source/dir2/c
mkdir -p target/dir1
mkdir dir_link
ln -s ../dir_link target/dir2

所以一开始我们有:

tree
├── dir_link
├── source
│   ├── a
│   ├── dir1
│   │   └── b
│   └── dir2
│       └── c
└── target
    ├── dir1
    └── dir2 -> ../dir_link

用:

cp -r source/* target

结果是:

CP:无法用目录"源/目录 2"覆盖非目录"目标/DIR2">

├── dir_link
├── source
│   ├── a
│   ├── dir1
│   │   └── b
│   └── dir2
│       └── c
└── target
    ├── a
    ├── dir1
    │   └── b
    └── dir2 -> ../dir_link

我正在寻找一个命令(cp,rsync(,它可以理解source/dir2/c应该复制到目标/dir2(这是一个dir符号链接(

最接近的是 cp 的-H选项

-H 遵循源代码中的命令行符号链接

但应用于目标

rsync -avhK source/* target

正确遵循目录符号链接:

├── dir_link
│   └── c
├── source
│   ├── a
│   ├── dir1
│   │   └── b
│   └── dir2
│       └── c
└── target
    ├── a
    ├── dir1
    │   └── b
    └── dir2 -> ../dir_link

更多信息 https://linux.die.net/man/1/rsync -K --copy-dirlinks

最新更新