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


27

На машине AI есть папка

/home/a/

На машине BI есть папка

/home/b/

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

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

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

Благодарность! :)

РЕДАКТИРОВАТЬ:

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

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

2
put -rработал бы тоже.
WakiMiko

1
Хорошо, но как я узнал, что для команды "put" доступна опция -r? Если я смотрю здесь, описывается только флаг -P ... То же самое в руководстве Спасибо! :)
fibon82

Вы должны опубликовать это как ответ вместо этого.
NN

Да. Вместо того, чтобы редактировать свой вопрос с ответом, вы должны ответить на свой вопрос и принять его.

@ fibon82 Актуальное руководство по OpenSSH sftpсм. в проекте OpenSSH .
Мартин Прикрыл

Ответы:


21

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

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

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

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


Ах, спасибо! :) Новая вещь, которую я узнал!
fibon82

@ fibon82: Добро пожаловать :)
Каролос

1
Я люблю тебя, я синхронизировал 400 МБ данных за 1 минуту, просто используя твой код. Я бы добавил, что вы также должны использовать --progress, иначе вы не будете ни на что пялиться, не зная, что происходит (и с какой скоростью :))
Сандро Антонуччи

1
К сожалению rsyncне говорит sftp-Протокол. Так что, если вы установили sftp-chroot, используя команду sshbuild in,internal-sftp то произойдетrsync сбой.
Тино

17

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

 put -r .

См man sftp.


-rПереключатель поддерживается начиная с OpenSSH 5.4 только.
Мартин Прикрыл

1
Обратите внимание, что -rкоммутатор только на стороне клиента (часть sftpкоманды). Таким образом, сторона сервера (здесь: получение) не нуждается в OpenSSH 5.4, только клиент должен поддерживать его.
Тино

10

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

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftp и scp на самом деле разные протоколы, оба основаны на ssh.
paradroid

1
Да, если сервер разрешает только протокол sftp, этот ответ не работает.
Рюффп

4

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

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

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


1
-rПереключатель поддерживается начиная с OpenSSH 5.4 только.
Мартин Прикрыл

Обратите внимание, что -rкоммутатор только на стороне клиента (часть sftpкоманды). Таким образом, сторона сервера (здесь: получение) не нуждается в OpenSSH 5.4, только клиент должен поддерживать его. И: Это должен быть принятый ответ , поскольку получение (возможно, неподдерживаемое) rsyncответа на вопрос с тегом sftpнемного сбивает с толку.
Тино

0

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

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

Добавили ли вы ссылку и доказательство, подтверждающие то, что вы заявляете, и подтвердили, что этот ответ еще не дан в одном из существующих ответов на пост. Прочтите «Почему мне нужно 50 репутации, чтобы комментировать», чтобы понять, как вы можете начать комментировать.
Сок Pimp IT

-1

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

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

Там нет mputкоманды в OpenSSH sftp. Может быть, вы ссылаетесь psftp?
Мартин Прикрыл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.