rsync с использованием части относительного пути

rsync с использованием части относительного пути

Предположим, у меня есть каталог на локальной машине, защищенный брандмауэром:

local:/home/meee/workdir/

И каталог на удаленной машине, по ту сторону брандмауэра:

remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/

...такой, что N>= 0.

На моей локальной машине есть скрипт, который использует rsync. Я хочу, чтобы этот скрипт копировал только one/two/с удаленной машины для переменной, но известной 'N', так что в итоге получится:

local:/home/meee/workdir/one/two/

Если я использую rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/, то в итоге получаю:

local:/home/meee/workdir/two/

Если я использую rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/, то в итоге получаю:

local:/home/meee/workdir/a1/a2/.../aN/one/two/

Ни то, ни другое мне не нужно.

  1. Существуют ли rsyncфлаги, с помощью которых можно достичь желаемого результата?
  2. Если нет, может ли кто-нибудь предложить простое решение?

решение1

Для -- относительного пути необходимо вставить точку в путь к исходному каталогу:

rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/

См. руководство:

-R, --относительный

[...]

Также можно ограничить объем информации о пути, которая отправляется как подразумеваемые каталоги для каждого указанного вами пути. С современным rsync на отправляющей стороне (начиная с 2.6.7) вы можете вставить точку и косую черту в исходный путь, например:

             rsync -avR /foo/./bar/baz.c remote:/tmp/

решение2

Если вы извлекаете файлы из rsyncболее старой версии, чем v2.6.7, вы можете сделать это, воспользовавшись rsyncопцией --rsync-path, которая позволяет указать, где на удаленном компьютере можно найти команду rsync. Однако вы можете использовать ее для смены каталога. Просто,

rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/

Связанный контент