Ответы:
sftpКак cpи scp, требует, чтобы при копировании папки (и ее содержимого, очевидно) вы явно указывали ей, что хотите рекурсивно перенести папку с помощью этой -rопции.
Итак, добавьте -rв команду.
-rк sftpкоманде при подключении. sftp -r user@host
Couldn't canonicalise: No such file or directory.
# sftp user@remote-host #> get -r remote-folder
Я могу только предложить, вы используете rsync. Это что-то вроде промышленного стандарта при перемещении файлов по защищенным соединениям.
rsync -alPvz ./source_dir server.com:destination_dir
Это то, что я использую уже много лет.
( -aопция заботится о таких вещах, как рекурсия каталога)
-a= рекурсия + сохранение символических ссылок, разрешений, времени модификации, владельца, группы, специальных файлов и файлов устройств (для последнего требуются привилегии суперпользователя); -l= сохранить символические ссылки (уже включены в -a); -P= показать прогресс при передаче + сохранить частично переданные файлы; -v= подробный режим (однако он кажется обязательным при использовании, -Pчтобы избежать странной ошибки? protocol version mismatch); -z= включить сжатие передаваемых данных.
-lпереключатель использоваться или нет. Я помню, старые версии не включены -lв -a.
Вы также можете использовать использование scp. Общий формат
scp -rp sourceDirName username@server:destDirName
scpозначает «защищенная копия». Флаги
-r записаться в подкаталоги-p сохранить время модификацииЯ считаю, что остальные предметы говорят сами за себя
Это работает для меня:
1) подключиться sftpк удаленному хосту
2) Перейдите в удаленный каталог, который вы хотите скопировать. (Пример: CD Music)
3) Перейдите в локальный каталог, в который вы хотите скопировать материал. (Пример: рабочий стол lcd)
4) Выполните эту команду: get -r *
Если rsyncэто не вариант, я бы порекомендовал lftp:
lftp sftp://user@host.com/path/path/
Затем используйте mirrorкоманду для рекурсивной загрузки, например так:
mirror -R
(Обратите внимание , что рекурсия по умолчанию. -RДля обратного . - сделать команду зеркала загрузки вместо загрузки Попробуйте добавить , --dry-runчтобы сделать исследование , чтобы убедиться , что он делает то , что вы ожидаете.)
Или загрузить без рекурсии:
mirror --no-recursion
Вы должны cdв каталоги, которые вы хотите отразить. Работает отлично!
Если можете, используйте sshfs . Это файловая система FUSE , доступная в большинстве современных приложений и работающая с любым SFTP-сервером. Это удаленная файловая система: она позволяет вам манипулировать удаленными файлами (по протоколу SFTP) с помощью обычных утилит.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Это что-то вроде клочья, но для меня работает следующее:
sshдля входа на удаленный компьютерsftpс удаленного компьютера на локальный компьютерgetкоманду с -rвозможностью переместить каталог и все его файлы.sftp> get -r data /opt/bin get: Invalid flag -r
Если вы задаетесь вопросом «как мне использовать sftp для передачи каталога», то
sftp -r user@server
Но если вы переносите каталог, я мог бы предложить два лучших варианта, в зависимости от ваших потребностей. sftpтребует входа на удаленный сервер в ssh-подобной командной строке, но если вам нужен только файл (-ы), есть более простые и быстрые способы.
УПП
Для одноразовой передачи, для загрузки попробуйте:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Если вы планируете синхронизировать каталоги на регулярной основе, использование rsync имеет больше смысла. Он выполняет дельты между двумя каталогами, сохраняя время передачи и данные по проводам.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Вот список некоторых из наиболее распространенных опций rsync: ( взято отсюда )
Надеюсь, это поможет!
вы можете попасть с сервера на локальный путь
scp -rp user@server:directoryname(full path) .