使用现有符号链接递归复制内容到目标上的目录

问题描述 投票:0回答:1
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 symlink cp
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.