Ответ 1
Возможно, вы ищете
rsync -aR
например:
rsync -a --relative /top/a/b/c/d remote:/
См. также этот трюк в другом вопросе.
Я ищу программу rsync
, которая создаст любые отсутствующие родительские каталоги на удаленной стороне.
Например, если у меня есть /top/a/b/c/d
на одном сервере и только /top/a
существует на удаленном сервере, я хочу скопировать d
на удаленный сервер и создать каталоги b
и c
, созданные как хорошо.
Команда:
rsync /top/a/b/c/d remote:/top/a/b/c
не будет работать, потому что /tmp/a/b
не существует на удаленном сервере. И если он существует, файл d
будет скопирован на путь /top/a/b/c
.
Это можно сделать с помощью rsync
с помощью переключателей --include
и --exclude
, но это очень важно, например:
rsync -v -r a dest:dir \
--include 'a/b' \
--include 'a/b/c' \
--include 'a/b/c/d' \
--include 'a/b/c/d/e' \
--exclude 'a/*' \
--exclude 'a/b/*' \
--exclude 'a/b/c/*' \
--exclude 'a/b/c/d/*'
копирует только a/b/c/d/e
в dest:dir/a/b/c/d/e
, даже если промежуточные каталоги имеют файлы. (Примечание - включение должно предшествовать исключениям.)
Есть ли другие варианты?
Возможно, вы ищете
rsync -aR
например:
rsync -a --relative /top/a/b/c/d remote:/
См. также этот трюк в другом вопросе.
rsync -aq --rsync-path='mkdir -p /tmp/imaginary/ && rsync' file [email protected]:/tmp/imaginary/
Из http://www.schwertly.com/2013/07/forcing-rsync-to-create-a-remote-path-using-rsync-path/, но не копируйте и не вставляйте туда, его синтаксис заблокирован.
он позволяет выполнить произвольную команду для установки пути к исполняемым файлам rsync.
Я предлагаю вам принудительно выполнить существование вручную:
ssh [email protected] mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c
это создает целевую папку, если она уже не существует.
--relative
не работает для меня, так как у меня была другая настройка.
Может быть, я просто не понял, как работает --relative
, но я обнаружил, что
ssh remote mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c
легко понять и выполнять работу.
Я искал лучшее решение, но мне кажется, что он лучше подходит, когда у вас слишком много подкаталогов для их создания вручную.
Просто используйте cp
в качестве промежуточного шага с опцией --parents
cp --parents /your/path/sub/dir/ /tmp/localcopy
rsync [options] /tmp/localcopy/* remote:/destination/path/
cp --parents
создаст структуру для вас.