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