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

160655
fibon82

На машине 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/ 
25
`put -r` тоже сработал бы. WakiMiko 12 лет назад 2
Хорошо, но как я узнал, что для команды "put" доступна опция -r? Если я посмотрю [здесь] (http://www.computerhope.com/unix/sftp.htm), описан только флаг -P ... То же самое в [руководстве] (http://www.r3v0.net) /docs/Delta/man/sftp.html) Спасибо! :) fibon82 12 лет назад 1
Вы должны опубликовать это как ответ вместо этого. N.N. 12 лет назад 0
Да. Вместо того, чтобы редактировать свой вопрос с ответом, вы должны ответить на свой вопрос и принять его. 10 лет назад 0
@ fibon82 Актуальное руководство по OpenSSH `sftp` см. в [проекте OpenSSH] (http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/sftp.1 ). Martin Prikryl 9 лет назад 0

6 ответов на вопрос

20
Karolos

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

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

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

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

Ах, спасибо! :) Новая вещь, которую я узнал! fibon82 12 лет назад 0
@ fibon82: Добро пожаловать :) Karolos 12 лет назад 0
Я люблю тебя, я синхронизировал 400 МБ данных за 1 минуту, просто используя твой код. Я бы добавил, что вы также должны использовать --progress, иначе вы не будете смотреть ни на что, не зная, что происходит (и с какой скоростью :)) Sandro Antonucci 11 лет назад 1
К сожалению, `rsync` не говорит по протоколу sftp. Поэтому, если вы устанавливаете [`sftp`-chroot, используя сборку` ssh` в `internal-sftp`] (https://wiki.archlinux.org/index.php/SFTP_chroot), то` rsync` завершается неудачей. Tino 8 лет назад 1
13
Carlos Da Costa

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

 put -r . 

См man sftp.

Ключ `-r` поддерживается только с [OpenSSH 5.4] (http://www.openssh.com/txt/release-5.4). Martin Prikryl 9 лет назад 0
Обратите внимание, что ключ `-r` только на стороне клиента (часть команды` sftp`). Таким образом, сторона сервера (здесь: получение) не нуждается в OpenSSH 5.4, только клиент должен поддерживать его. Tino 8 лет назад 1
9
deed02392

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

scp -r /home/a/ user@remote.host.com:/home/b/ 
sftp и scp на самом деле разные протоколы, оба основаны на ssh. paradroid 12 лет назад 5
Да, если сервер разрешает только протокол sftp, этот ответ не работает. рüффп 10 лет назад 1
3
guest_who

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

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

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

Ключ `-r` поддерживается только с [OpenSSH 5.4] (http://www.openssh.com/txt/release-5.4). Martin Prikryl 9 лет назад 1
Обратите внимание, что ключ `-r` только на стороне клиента (часть команды` sftp`). Таким образом, сторона сервера (здесь: получение) не нуждается в OpenSSH 5.4, только клиент должен поддерживать его. И: ** Это должен быть принятый ответ **, поскольку получение (возможно, неподдерживаемого) `rsync` в качестве ответа на вопрос с тегом` sftp` немного сбивает с толку. Tino 8 лет назад 0
0
Dieter

На самом деле, поставить -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 репутации, чтобы комментировать»] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i -до-вместо), чтобы убедиться, что вы понимаете, как вы можете начать комментировать. Pimp Juice IT 7 лет назад 0
-1
jayarjo

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

mput -rp /home/a/ /home/b/ 
В OpenSSH `sftp` нет команды` mput`. Может быть, вы ссылаетесь на `psftp`? Martin Prikryl 9 лет назад 0