2012-02-08 13:15:37 +0000 2012-02-08 13:15:37 +0000
29
29

sftp: загрузить все файлы, каталоги и подкаталоги, содержащиеся в папке

На машине A у меня есть папка

/home/a/

На машине B у меня есть папка

/home/b/

Я хочу передать все файлы, каталоги и подкаталоги /home/a в /home/b с помощью sftp На машине A я попробовал команды:

sftp fibon82@machineB.com
put /home/a/* /home/b/

но это не работает, я получаю сообщение об ошибке: “пропустить нерегулярный файл /home/a/a1”… [a1 - подкаталог a] Как я мог изменить инструкцию put?

Спасибо! :)

EDIT:

Я решил с помощью scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/

Ответы (6)

21
21
21
2014-10-02 20:33:25 +0000

В sftp эта команда рекурсивно загружает содержимое текущей директории в удаленную текущую директорию:

put -r .

Смотрите man sftp .

21
21
21
2012-02-08 22:41:19 +0000

Хотя и не является строго эквивалентом sftp, rsync является очень мощной альтернативой для scp и sftp, особенно при обновлении копий с машины A на машину B, так как она не копирует файлы, которые не были изменены; она также может удалять файлы с машины B, которые были удалены с машины A (конечно, только в том случае, если ей сказано об этом).

В вашем случае синтаксис будет

rsync -zrp /home/a/ user@remote.host.com:/home/b/

Опция -r предназначена для рекурсивного копирования файлов, -z включает компрессию во время передачи, и -p сохраняет права доступа к файлам (создание файлов, редактирование и т.д.) во время копирования, что является чем-то, что scp не делает AFAIK. Возможны и другие опции; как обычно, читайте страницы man.

10
10
10
2012-02-08 16:04:32 +0000

scp (безопасная копия) - это де-факто Linux для передачи файлов по защищенному туннелю. В вашем случае вы захотите использовать рекурсивный переключатель, например:

scp -r /home/a/ user@remote.host.com:/home/b/
4
4
4
2014-01-04 14:02:14 +0000

Попробуйте использовать

put -r /home/a/ /home/b/

для получения дополнительной информации: это

0
0
0
2017-10-05 13:53:58 +0000

Вообще-то, надо работать. Но папка назначения должна присутствовать на вашем удаленном хосте:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2
-1
-1
-1
2014-02-14 10:10:51 +0000

В моем случае rsync было невозможно, так что я использовал:

mput -rp /home/a/ /home/b/