Рекурсивно копировать содержимое с существующими символическими ссылками на каталоги на цели - PullRequest
0 голосов
/ 02 апреля 2019
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: не может перезаписать не-directory 'target / dir2' с каталогом 'source / dir2'

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

Я ищу команду (cp, rsync), которая может понять, что source / dir2 / c должен быть скопированto target / dir2 (который является символической ссылкой dir)

Ближайшим будет параметр -H для cp

-H, который следует по символическим ссылкам командной строки в SOURCE * 1021.*

но применяется к TARGET

1 Ответ

0 голосов
/ 02 апреля 2019
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

...