Как написать скрипт scp -r? - PullRequest
0 голосов
/ 31 июля 2010

Я не могу убедить scp вести себя.

Для тестовых данных

ubuntu@domU-12-31-38-00-D4-F1:/tmp$ find /tmp/a1/
/tmp/a1/
/tmp/a1/a2
/tmp/a1/a2/a3

При вводе команды

ubuntu@domU-12-31-38-00-D4-F1:/tmp$ scp -r /tmp/a1 domU-12-31-38-00-E2-52.compute-1.internal:/tmp/a1

Я быожидайте, что структура каталога, созданная на domU-12-31-38-00-E2-52.compute-1.internal, будет одинаковой, независимо от того, существует ли каталог / tmp / a1 на целевом хосте или нет.Вместо этого scp на самом деле создает следующую структуру (если на целевом хосте существует / tmp / a1)

ubuntu@domU-12-31-38-00-D4-F1:/tmp$ ssh domU-12-31-38-00-E2-52.compute-1.internal find /tmp/a1 
/tmp/a1
/tmp/a1/a1
/tmp/a1/a1/a2
/tmp/a1/a1/a2/a3

Как можно принудительно скопировать scp в данный каталог в качестве корня операции?

Позже я хотел бы написать сценарий этой операции, чтобы при заданном пути к каталогу на главном сервере я мог вызвать сценарий, который будет реплицировать одну и ту же структуру каталогов на все подчиненные устройства.Обратите внимание, что поведение rsync (по крайней мере из того, что я тестировал) таким же образом.

Спасибо, Максим.

Ответы [ 2 ]

2 голосов
/ 31 июля 2010

scp имитирует поведение cp, то есть копирование в целевой каталог (если он существует). Просто скопируйте его в /tmp вместо /tmp/a1.

0 голосов
/ 04 апреля 2011

Вместо использования $ scp -r /tmp/a1 используйте это: $ scp -r /tmp/a1/*, который будет копировать каждый файл в / tmp / a1, поэтому ваша конечная структура назначения будет / tmp / a1 / a2 / a3. В противном случае, я бы предложилцелевой каталог просто "/ tmp /", а не "/ tmp / a1 /", в любом случае будет работать.А что касается rsync, то нет, это не то же самое: **this/** для rsync означает **this/** в терминах scp или cp.Конечная косая черта [this/] означает копирование содержимого папки.Если оставить косую черту выключенной , она скопирует сам каталог [если он рекурсивный].

Надеюсь, вы нашли это полезным.:) Мэтт

...