Как реализовать рекурсивный ввод в 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 для работы. Не очень хорошее решение, но выполняет эту работу.