Как мне получить весь каталог в sftp?

433230
Matthew

Я только учусь использовать sftp и хочу скопировать каталог с удаленного компьютера на мой локальный компьютер. Если я попробую

get [directory] 

это дает мне эту ошибку:

Cannot download non-regular file: /home/mpirocch/Documents 

get -R тоже не работает.

171
Рекурсивный метод put / get был добавлен в OpenSSH в версии 5.4, которая была выпущена в 2010 году. Вы можете рассмотреть возможность обновления ваших серверов, так как в них также добавлено множество исправлений ошибок и улучшены функции безопасности. Lèse majesté 11 лет назад 2

9 ответов на вопрос

242
mani-fresh

Используйте -r(рекурсивный) флаг:

get -r * 
Спасибо за размещение ответа, который фактически отвечает на вопрос. jonnyflash 12 лет назад 15
Дает мне: `get: Неверный флаг -r` ghbarratt 11 лет назад 28
Это также дает мне неверный флаг. Я не уверен, что это поддерживается во всех системах. Ben 11 лет назад 2
@Ben: Когда я задал этот вопрос в 2009 году, флаг `-r` не существовал. Ваша система обновлена? Matthew 11 лет назад 0
Работает на всех современных системах. Просто проверил это. buschtoens 10 лет назад 0
@silvinci не * все * современные системы. Недопустимый вариант с CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64 CrackerJack9 10 лет назад 15
По какой-то причине * загрузка * рекурсивно не работает с `put -r *`, она не может создавать каталоги. Однако для меня решение lftp ниже работало просто отлично. Ciantic 9 лет назад 0
Кто-нибудь знает способ получить -r, чтобы дать каталогам права на запись? Каждый раз, когда я пытаюсь использовать -r для каталога, доступного только для чтения, он не будет загружать его, поскольку он также создает каталог только для чтения. Rahly 8 лет назад 0
Не работает с openssh-clients-5.3p1-111.el6.x86_64 на 2.6.32-573.12.1.el6.x86_64 # 1 SMP вт 15 дек 08:24:23 CST 2015 x86_64 x86_64 x86_64 GNU / Linux user637338 8 лет назад 0
более конкретно `mget -r ./*`, чтобы получить все файлы и папки в текущем каталоге. тоже работает в MINGW64. https://kb.wisc.edu/cae/page.php?id=32991 SashikaXP 6 лет назад 0
52
Cristian Ciupitu

Использование:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents 
Это работает, но было бы неплохо сделать это из SFTP (чтобы я мог посмотреть, что я копирую, прежде чем копировать). Это возможно? Matthew 14 лет назад 2
@ Мэтью: я так не думаю. Я задавал себе тот же вопрос в течение некоторого времени, и лучший ответ, который у меня есть на данный момент, это `scp -r`. Или вы можете использовать продвинутый SFTP-клиент, такой как Filezilla. Cristian Ciupitu 14 лет назад 0
scp -r будет следовать символическим ссылкам ... jsleuth 11 лет назад 1
Некоторые системы могут разрешать `sftp`, но не` scp` доступ. Turion 6 лет назад 2
39
bshanks

Используйте lftp:

lftp sftp://user@host 

Затем, внутри lftp, cdв каталог, который вы хотите скопировать, и используйте mirrorкоманду для рекурсивной загрузки выбранного каталога, например:

mirror 

Эта команда принимает параметры и аргументы:

зеркало [ ОПЦИИ ] [ источник [ цель ]]

Например, опция -R(или --reverse) приведет к загрузке дерева локальных каталогов в удаленный каталог:

mirror -R 

Смотрите lftp(1)страницу руководства на сайте проекта или на Debian.org для других команд и опций.

+1 лфтп - как маленький пучок магии и радости! WCWedin 13 лет назад 4
15
Ryan Thompson

Не используйте программу sftp напрямую, если вы можете найти что-то лучшее. Для Linux многие файловые менеджеры (по крайней мере, Nautilus и Dolphin, GNOME и KDE) изначально поддерживают sftp, и всегда есть sshfs. Для Windows есть WinSCP и, возможно, другие . Смысл всего этого в том, чтобы позволить вам получать доступ к файлам через sftp, как если бы они были на обычном файловом элементе, поэтому вам не нужно заботиться о том, чтобы вы обращались к ним через sftp.

Вау, наутилус работает очень хорошо с SFTP. Я добавил закладку в «Наутилус», и теперь все это до смешного просто. Спасибо! Matthew 14 лет назад 0
У меня были проблемы с производительностью Nautilus SFTP. Да, это действительно удобно, но я не смог насытить сеть 1 Гбит / с через Nautilus, в то время как с простым интерфейсом командной строки `sftp / ssh` я был (около 100 МБ / с передачи файлов). Так что проблема была в Nautilus на GNU / Linux Mint. stamster 6 лет назад 0
13
Ken Keenan

Попробуй mgetвместо get.

Уточнение: mget будет работать, если вы находитесь в каталоге, который хотите скопировать; если вы делаете что-то вроде этого:

sftp> cd dir_to_get sftp> mget * 

он получит все файлы в этом каталоге. Однако он не будет рекурсивно получать содержимое каких-либо подкаталогов.

Mget не работает лучше, чем получить для меня. Matthew 14 лет назад 1
не может загрузить нестандартный файл с этим Dchris 8 лет назад 1
Это работало для меня в системе, где 'get -r' не работал. Tchotchke 7 лет назад 1
13
nwgat

хорошо это маленькое руководство должно помочь, зеркалировать удаленный сервер в локальную папку с помощью lftp

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = использует протокол SFTP
  • mirror = режим зеркала
  • verbose = показывает загружаемые файлы
  • use-pget-n = количество сегментов, действительно полезно для ускорения больших файлов
  • parallel = загружает файлы множителя одновременно

если вы хотите, чтобы загрузить файлы в параллельном переключателе из use-pget-n=8с--parallel=8

надеюсь, это поможет всем, кому нужно зеркалировать удаленную папку в локальную папку

Спасибо, это сработало для меня, после того, как другие методы потерпели неудачу (в частности, нет опции "-r" на sftp). Первую часть команды в моем случае нужно было заключить в кавычки из-за долларовых символов в пароле `lftp 'sftp: // user: pa$$word@server.org: 22' -e 'mirror --verbose - use-pget-n = 8 -c / remote / path / local / path'` Jason 9 лет назад 0
9
drkvogel
get -r [directory] 

попадает [directory]и все под него, где rстоит рекурсивный. Я нашел это, просто набрав helpс sftp.

ИМО это лучший ответ на этот вопрос. :) ramrunner 11 лет назад 1
Это дубликат [ответа] (http://superuser.com/a/216447/2357) от * 29 ноября 2010 года * (почти полтора года назад). Cristian Ciupitu 10 лет назад 3
4
Aziraphale

Как с cp:

scp -rp user@host:/path/to/dir dir 

Вышеуказанное сохранит время и режимы исходных файлов и подкаталогов. Это особенно полезно для поиска резервных копий.

Это в основном дубликат [ответа] (http://superuser.com/a/216447/2357) от * 29 ноября 2010 года * (почти два года назад). Cristian Ciupitu 10 лет назад 0
0
YumYumYum

У меня есть папка Java dist на удаленном сервере, где у меня есть следующее дерево:

- dist --- Audio.jar --- README --- lib ----- lib.jar 

Цель: я хочу использовать SFTP? И поместите их в / tmp / <>

Шаг 1. sftp remoteuser @ ip

Шаг 2. cd / var / tmp

Шаг 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Шаг 3. Жк / тм / дист

Шаг 4. mget *

Шаг 5. lcd / tmp / dist / lib

Шаг 6. Mget *

Шаг 7. наконец у меня есть цель

$ ls Audio.jar lib README.TXT 

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