Как реализовать рекурсивный ввод в sftp

В командной строке sftp в моем Ubuntu нет рекурсивного ввода. Я нашел некоторые дебаты с 2004 года о реализации этой функции с помощью переключателя опций -R. Поэтому я вижу какую-то самостоятельную рекурсию как единственный вариант.

Т.е.

  • итерация через список каталогов
  • cd в директории
  • mkdir, если несуществующий
  • положить файлы

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

Rsync или scp не является вариантом, потому что у меня нет доступа к серверу на shell. Только sftp.

Ответы

Ответ 1

Посмотрите lftp. Это мощный клиент для передачи файлов, который поддерживает ftp, ftps, http, https, hftp, fish (передача файлов через сеанс ssh shell) и sftp. Он имеет ftp-подобный интерактивный интерфейс, но также позволяет указывать все команды в командной строке. Посмотрите mput (не рекурсивный, но обрабатывает шаблоны glob) и команды mirror (плохой человек rsync).

Я использую его с сервером, который обрабатывает только sftp-загрузки следующим образом:

lftp -c "open -u $MYUSER,$MYPASSWORD sftp://$TARGET ; mirror -R $SOME_DIRECTORY"

Ответ 2

Клиент FTP GUI FileZilla также поддерживает SFTP, а также поддерживает загрузку и загрузку в каталогах.

Ответ 3

Хотя я думаю, что lftp - лучший вариант, если он доступен, я застрял на древней установке Cent OS и вам нужно было сделать рекурсивный запуск только через SFTP. Вот что я сделал:

find dir -type d -exec echo 'mkdir {}' \; | sftp [email protected]
find dir -type f -exec echo 'put {} {}' \; | sftp [email protected]

Итак, в основном убедитесь, что все каталоги существуют, а затем отправляют файлы.

Ответ 4

В командной строке вы можете сделать это, используя пакет putty-tools. Он поставляется с заменой sftp под названием psftp.

Он поддерживает mput -r, который рекурсивно копирует локальный каталог.

Ответ 5

my ubuntu 12.04 поставляется с put -r в sftp

Ответ 6

Я думаю, вы можете сделать это с помощью bash, но это будет очень много работы. Вместо этого я предлагаю взглянуть на Python и библиотеку Chilkat.

Ответ 7

В Java вы можете использовать edtFTPj/PRO, наш коммерческий продукт, для перевода рекурсивно через SFTP. В качестве альтернативы вы можете рассмотреть SCP, который обычно поддерживает рекурсию и запускается через SSH.

Ответ 8

Как насчет sshfs?

Совмещено, конечно, с cp -r.

Или, если это не так, rsync -r.

Ответ 9

После многих поисковых запросов и хороших ответов я использовал Transmit syncing для работы. Не очень хорошее решение, но выполняет эту работу.