Ответы:
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) .