it-swarm-ru.tech

Загружать каталоги с помощью sftp?

У меня возникли проблемы с загрузкой каталогов (которые содержат другие каталоги глубиной в несколько уровней) по sftp. Я понимаю, что могу обойти это, используя gzipping, но я не понимаю, почему это необходимо.

Во всяком случае, я стараюсь

sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"

Я думаю, что последнее сообщение об ошибке совершенно глупо. Таким образом, каталог не существует? Почему бы не создать каталог?

Есть ли какой-либо вопрос об этой проблеме с sftp, или я должен просто использовать scp?

97
Earlz

ИСПРАВЛЕНО : я изначально ошибочно утверждал, что OpenSSH не поддерживает put -r. Да, но очень странным образом. Кажется, ожидается, что каталог назначения уже существует с тем же именем, что и исходный каталог.

sftp> put -r source
 Uploading source/ to /home/myself/source
 Couldn't canonicalize: No such file or directory
 etc.
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

Что особенно странно, это то, что это применимо, даже если вы дадите другое имя для пункта назначения:

sftp> put -r source dest
 Uploading source/ to /home/myself/dest
 Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Entering source/
 source/file1
 source/file2

Для лучшей реализации рекурсивного put вы можете использовать инструмент командной строки PuTTY psftp. Это в PuTTY-tools пакет под Debian (и, скорее всего, Ubuntu).

С другой стороны, Filezilla будет делать то, что вы хотите, если вы хотите использовать графический интерфейс.

68
Jander

Я не знаю, почему sftp делает это, но вы можете только рекурсивно копировать, если каталог назначения уже существует. Так сделай это ...

sftp> mkdir bin
sftp> put -r bin
130
Useful Dude

Возможно, вам будет интересно использовать rsync. Команда для этого будет

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

Это скопирует все в bin/ и ​​поместите его на удаленный сервер в /home/earlz/blah/bin/. В качестве дополнительного преимущества, он сначала проверит, не изменился ли файл на удаленной стороне, и если нет, то не отправит его повторно. Кроме того, вы можете добавить опцию -z, и она сожмет ее для вас.

22
Shawn J. Goff

lcd: ваша локальная папка (с подпапками)

cd: ваша удаленная папка

put -r .

9
eliseu

Могу ли я предложить несколько сложный ответ, без архивирования, но с учетом tar?

Вот так:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

Это упакует каталог ./bin с tar (-cf: = create file), filename - (none, stdout) и перенаправит его через ssh-команду на target.org (который также может быть IP), где команда в кавычках выполняется: cd to blah и tar -xf (извлечь файл) - нет, нет имени, просто stdin.

Это как если бы вы упаковали пакет дома, принесли его на почту, а затем поехали на работу, где ожидали пакет, и открыли его.

Может быть, есть гораздо более элегантное решение, которое просто использует sftp.

8
user unknown

Вы можете использовать yafc (пока еще клиент FTP/SFTP). Опция -r Работает там очень хорошо.

2
Dmitry Shpakov

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

например :

rsync -zrp /home/a/ [email protected]:/home/b/  

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

1
Sherlock

Войдите на удаленный сервер с помощью ssh, используйте sftp, чтобы снова подключиться к вашему устройству, затем используйте get -r команда для передачи каталогов на удаленный сервер. Команда get позволяет рекурсивно передавать каталоги, не создавая каталог.

ssh remote ip
sftp local ip 
get -r whichever-dir
0
Cyb3rT00th

Случай SFTP:

Мне нужно было скопировать эту структуру на моем FTP:

mainfolder --- folder --- subfolder
                  |           |
              file1.txt   file2.txt

Это решило мою проблему:

cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/
0
Nikita Malovichko

Я только что узнал из Arch Linux Wiki , что можно смонтировать sftp-ресурс с помощью sshfs. Я использую sftp-сервер с chroot и jail и sshfs работает очень хорошо.

  1. Mount: sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. РазПравка: fusermount -u <your/local/mount/directory>
0
saltani