Загрузка каталогов с sftp?

Если ответ @Maciej и @Gilles не решает Вашу проблему, и Вы не распознаете процесс (и выяснение, что это с Вашим дистрибутивом, не поднимает ответы). Проверьте на Руткит и любые другие знаки, что Вы принадлежали. Руткит более, чем способен к препятствованию тому, чтобы Вы уничтожили процесс. На самом деле многие способны к препятствованию тому, чтобы Вы видели их. Но если они забывают изменять 1 небольшую программу, они могли бы быть определены (например, они изменили top, но нет htop ). Скорее всего, дело обстоит не так, но лучший сейф, чем извините.

97
07.02.2011, 05:04
10 ответов

ИСПРАВЛЕННЫЙ: Я первоначально утверждал неправильно, что 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 сделает то, что Вы хотите, если Вы хотите использовать GUI.

67
27.01.2020, 19:30

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

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

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

22
27.01.2020, 19:30
  • 1
    Awsome! Настолько простой! –  Asken 16.07.2013, 12:47
  • 2
    Обратите внимание на то, что sftp команда и протокол. rsync не поддерживает sftp- протокол. –  Tino 03.05.2016, 15:07

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

Здесь мы идем:

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

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

Это - как будто Вы упаковываете пакет дома, приносите его к сообщению, затем ездите на работу, где Вы ожидаете пакет и открываете его.

Возможно, существует намного более изящное решение, которое просто использует sftp.

8
27.01.2020, 19:30
  • 1
    переданный по каналу tar очень хорошее решение, однако этому нужно ssh войдите в поддержку (sftp другой протокол сверху ssh). tar, в отличие от других, по умолчанию, выполнения рекурсивно, передает все специальные файлы (FIFO, блок/устройства посимвольного ввода-вывода и т.д.), пытается перевести UID/GID, отображающийся от источника до целевой системы, и имеет традиционную короткую командную строку. (Одно исключение, хотя: "Сокеты домена Unix" не передаются. Но кому нужны они?) –  Tino 03.05.2016, 15:22
  • 2
    я использую этот метод, когда мне нужно сжатие между узлами также, можно использовать pv инструмент для наблюдения скорости в длинном –  Felipe Alcacibar 03.05.2017, 17:40

Можно использовать yafc (Все же другой клиент FTP/SFTP). -r опция работает там очень хорошо.

2
27.01.2020, 19:30

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

sftp> mkdir bin
sftp> put -r bin
129
27.01.2020, 19:30

Самый простой подход заключается в том, чтобы просто сохранить сценарий python как, например, script.py , а затем вызвать его из сценария bash, или вызвать после сценария bash:

#!/usr/bin/env bash
echo "This is the bash script" &&
/path/to/script.py

Или

script.sh && script.py
-121--32233-

Вы можете использовать heredoc, если хотите сохранить источник сценариев bash и python Например, укажите, что ниже указано содержимое файла с именем pyinbash.sh :

#!/bin/bash

echo "Executing a bash statement"
export bashvar=100

cat << EOF > pyscript.py
#!/usr/bin/python
import subprocess

print 'Hello python'
subprocess.call(["echo","$bashvar"])

EOF

chmod 755 pyscript.py

./pyscript.py

Теперь при запуске pyinbash.sh появится:

$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe
-121--32231-

lcd : локальная папка (с вложенными папками)

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

put -r.

9
27.01.2020, 19:30

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

например:

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

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

1
27.01.2020, 19:30

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

ssh remote ip
sftp local ip 
get -r whichever-dir
0
27.01.2020, 19:30

Случай 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
27.01.2020, 19:30

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

  1. Крепление:sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. Размонтировать:fusermount -u <your/local/mount/directory>
0
27.01.2020, 19:30

Теги

Похожие вопросы