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:无法用目录'source / dir2'覆盖非目录'target / dir2'
├── dir_link
├── source
│ ├── a
│ ├── dir1
│ │ └── b
│ └── dir2
│ └── c
└── target
├── a
├── dir1
│ └── b
└── dir2 -> ../dir_link
我正在寻找一个命令(cp,rsync),可以理解source / dir2 / c应该被复制到target / dir2(这是一个dir符号链接)
最接近的是cp的-H
选项
-H遵循SOURCE中的命令行符号链接
但适用于TARGET
rsync -avhK source/* target
正确遵循dir符号链接:
├── 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