2012-07-21 2 views
9

Есть ли способ для scp все файлы в каталоге рекурсивно на удаленную машину и сохранить их исходные имена файлов, но не копировать каталог, в котором он находится?Рекурсивно scp за исключением текущего каталога

dir1/file 
dir1/dir2/file2 

поэтому содержимое dir1 будет скопировано только. dir1 не будет создан. Каталог dir2 будет создан с file2 внутри.

Я пробовал scp -r dir1 remote:/newfolder, но он создает dir1 в каталоге /newfolder на remote. Я не хочу, чтобы он создал этот каталог dir1. Просто поместите все файлы внутри dir1 в newfolder.

ответ

19
cd dir1 
scp -r . remote:/newfolder 

Это позволяет избежать давая scp шанс сделать что-нибудь с именем dir1 на удаленной машине. Вы можете также предпочитают:

(cd dir1; scp -r . remote:/newfolder) 

Это оставляет свою оболочку в его исходный каталог, в то время как работает та же (потому что он запускает подоболочку, который делает cd и scp операции).

8

Это означает скопировать список файлов, созданных за счет расширения оболочки dir1/* на пульте дистанционного управления удаленность:/NewFolder

scp -r dir1/* remote:/newfolder 
+0

Мне нравится этот ответ, потому что он избегает необходимости делать 'cd'. Если ваш следующий оператор после 'scp' ожидает, что вы попадете в исходный каталог, то вам придется сделать еще один шаг к' cd' обратно к нему. – jreancsu

1

Вы можете использовать синтаксис точки с относительным путем.

scp -r dir1/. remote:/newfolder 

Если удаленный каталог не существует, он создается.

Смежные вопросы