2010-07-31 1 views
0

Кажется, я не могу убедить scp вести себя.Как скопировать scp -r-копию?

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

[email protected]:/tmp$ find /tmp/a1/ 
/tmp/a1/ 
/tmp/a1/a2 
/tmp/a1/a2/a3 

О выдаче команды

[email protected]:/tmp$ scp -r /tmp/a1 domU-12-31-38-00-E2-52.compute-1.internal:/tmp/a1 

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

[email protected]:/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 

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

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

Спасибо, Maxim.

ответ

2

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

+0

Я не думаю, что он будет работать во всех случаях как общее копирование на служебную программу. Ваше предложение означает, что мне нужно будет найти абсолютный путь для параметра, а затем решить, является ли это каталогом или нет. Если после этого выровняете один уровень вверх до создания команды scp. Разве нет более простого решения, «более дружественного сценарию»? –

+0

Вы также можете накладывать один уровень на файлы. Я не думаю, что это должно быть условным. 'dirname' сделает это за вас. Вы должны быть осторожны с косыми чертами в конце пути. –

0

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

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