Як отримати весь каталог в sftp?


189

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

get [directory]

це дає мені цю помилку:

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

get -R теж не працює.


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

Відповіді:


266

Використовуйте -rпрапор (рекурсивний):

get -r *

16
Дякуємо, що поставили відповідь, яка насправді відповідає на питання.
jonnyflash

30
Дає мені:get: Invalid flag -r
ghbarratt

2
Це також дає мені недійсний прапор. Я не впевнений, що це підтримується у всіх системах.
Бен

@Ben: Коли я задав це питання у 2009 році, -rпрапора не існувало. Ваша система оновлена?
Матвій

15
@silvinci не всі існуючі системи. Нелегальний варіант із CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

Використання:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
Це працює, але було б непогано мати можливість це зробити з SFTP (так що я бачу, що я копіюю, перш ніж скопіювати його). Чи можливо це?
Метью

@Matthew: Я не думаю, що так. Я задаю собі те саме питання вже деякий час, і найкраща відповідь, яку я маю на даний момент, - це scp -r. Або ви можете використовувати просунутий клієнт SFTP, як Filezilla.
Крістіан Цюпіту

1
scp -r буде слідувати посиланнями ...
jsleuth

5
Деякі системи можуть дозволити sftp, але не scpотримати доступ.
Туріон

40

Використання lftp:

lftp sftp://user@host

Потім, в межах lftp, cdв каталог, який ви хочете скопіювати, і скористайтеся mirrorкомандою для рекурсивного завантаження вибраного каталогу, наприклад:

mirror

Ця команда приймає параметри та аргументи:

дзеркало [ ВАРІАНТИ ] [ джерело [ ціль ]]

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

mirror -R

Дивіться довідковуlftp(1) сторінку на сайті проекту або на Debian.org для інших команд та параметрів.


4
+1 lftp - це як маленький пучок магії та радості!
WCWedin

16

добре, це маленьке керівництво повинно допомогти, відобразити віддалений сервер у локальну папку з 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'
Джейсон

15

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


Нічого собі, nautilus дуже добре працює з SFTP. Я додав закладку в Наутілус, і тепер це все смішно просто. Дякую!
Метью

У мене виникла проблема з Nautilus SFTP. Так, це дуже зручно, але я не зміг наситити мережею 1 Гбіт / с через Nautilus, тоді як з простим sftp/sshінтерфейсом командного рядка я був (близько 100 МБ / с передача файлів). Тож проблемою був Nautilus на GNU / Linux Mint.
stamster

13

Спробуйте mgetзамість get.

Роз'яснення: mget буде працювати , якщо ви перебуваєте всередині директорії , яку ви хочете скопіювати; якщо ви робите щось подібне:

sftp> cd dir_to_get
sftp> mget *

він отримає всі файли в цьому каталозі. Однак він не буде рекурсивно отримувати вміст будь-яких підкаталогів.


1
mget не працює краще, ніж отримати для мене.
Метью

1
отримання Неможливо завантажити нестандартний файл із цим
Дхріс,

1
Це працювало для мене в системі, де 'get -r' не працювало.
Тхочке

10
get -r [directory]

отримує [directory]і все під ним, де rстоїть рекурсивна. Я знайшов , що це просто набравши helpз sftp.


1
IMO - це найкраща відповідь на це питання. :)
ramrunner

3
Це дублікат відповіді від 29 листопада 10 року (майже півтора року тому).
Крістіан Цюпіту

5

Як і у випадку cp:

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

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


В основному це дублікат відповіді від 29 листопада 10 року (майже два роки тому).
Крістіан Цюпіту

0

Я маю папку dist 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. lcd / tmp / dist

Крок 4. mget *

Крок 5. lcd / tmp / dist / lib

Крок 6. mget *

Крок 7. нарешті, у мене є мета

$ ls
Audio.jar  lib  README.TXT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.