Як рекурсивно завантажити папку через FTP в Linux [закрито]


325

Я намагаюся ftp-папку за допомогою клієнтського рядка ftp-клієнта, але поки що мені вдалося використовувати лише "get" для отримання окремих файлів.


5
правильна відповідь - 6 квітня 1111 о 14:13 lkuty. Не використовуйте mget, це зовсім не рекурсивно. відповідь 22 вересня08 р. о 9:01 Thibaut Barrère легше зрозуміти, але потрібно додати варіант, -l 0як згадується в коментарях
chriscatfr

Відповіді:


634

Ви можете розраховувати на wget, який зазвичай обробляє ftp отримати належним чином (принаймні, на мій власний досвід). Наприклад:

wget -r ftp://user:pass@server.com/

Ви також можете використовувати те, -mщо підходить для дзеркального відображення. Наразі це еквівалентно -r -N -l inf.

Якщо у вас є якісь особливі символи в реквізитах даних, можна вказати --userта --passwordаргументи, щоб змусити його працювати. Приклад із спеціальним входом із конкретними символами:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDIT Як зазначав @asmaier, слідкуйте за тим, що навіть якщо -rце рекурсія, вона має максимальний максимальний рівень 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Якщо ви не хочете пропускати підкаталоги, краще скористайтеся параметром дзеркального відображення -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.

121
Краще використовувати wget -m( --mirror). wget -rза замовчуванням обмежена глибиною рекурсії 5.
asmaier

13
Мені довелося користуватися --userі --passwordнадто Red Red Hat. Мій wget: GNU Wget 1.11.4 Red Hat modifiedЦікаво, чи це версія версія чи річ
distro

61
Ви можете встановити нескінченний рівень рекурсії -l 0, тому не потрібно використовувати --mirrorякісь небажані побічні ефекти, такі як .listing файли
Hnatt

28
Я використовую wget --ask-password -rl 99 ftp://user@server.com. Таким чином пароль не видно з psі не залишається в історії. Звичайно, за характером ftp він надсилається незашифрованим на сервер.
Вальтер Трос

7
Нагадування для bash newbs: вам потрібно буде використовувати одинарні лапки, якщо ваше ім'я користувача або пароль мають контрольні символи (наприклад $), наприклад--user='user' --password='pa$$word'
tobek

164

Тільки для доповнення відповіді, яку дав Тібаут Барре.

я використав

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

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

  • -nH уникає створення каталогу з ім'ям сервера
  • -nc уникає створення нового файлу, якщо він уже існує в пункті призначення (його просто пропускають)
  • --cut-dirs = 5 дозволяє мені взяти вміст / absolut / path / to / каталог і помістити його в каталог, де я запускаю wget. Число 5 використовується для фільтрації 5 компонентів шляху. Подвійний нахил означає додатковий компонент.

3
Блискуча. Можливість пропускати вже наявні файли чудово підходить для отримання останніх доповнень щодо міграції сервера. rsync є більш ефективним та гнучким, але іноді ця опція просто недоступна, і може використовуватися лише FTP.
Джейсон

Приємні парами тут особливо -nc та --cut-dirs. Дякую, що поділились!
Ленс Клівленд

2
Я не завжди довіряю "пропустити наявні файли", тому що один з них може бути неповним або різним за розміром і вмістом, але добре, він згадав про варіант
Daniel W.

Навіть сьогодні я користуюся цією командою wget, коли не можу використовувати rsync. -Nc та --cut-dirs настільки корисні!
Наполовину божевільний

4
Дивовижно! І якщо ви не хочете ставити свій пароль в командному рядку, ви можете використовувати --ftp-user=USERі --ask-password.
шовер

25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

Я не зміг увійти на FTP-сервер за допомогою парами, але використовуючи структуру open ftp://USERNAME:PASSWORD@HOSTпісля запуску ncftp…
feeela

+1 - Я знаю, що ця публікація стара, але я просто натрапила на неї, і ncftp був дуже простим у використанні. Я використовував -R для рекурсивного отримання з ncftpget
Zack Macomber

безумовно, більш надійний wgetта швидший у режимі TAR. Дякую!
lencinhaus

3
Це не працює, як зазначено в Ubuntu 14.04. Синтаксис, який працював для мене, був "get -R directory" замість mget.
Іван

Працював для мене на Ubuntu 14.04. Мені не довелося mget, це все просто там.
Ешлі

22

Якщо lftpвін встановлений на вашій машині, використовуйте mirror dir. І ви закінчили. Дивіться коментар Ciro нижче, якщо ви хочете рекурсивно завантажувати каталог.


7
btw, mirror -R dirчи рекурсивне завантаження / оновлення каталогу
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
також може використовувати mirror ./для завантаження всіх файлів і папок рекурсивно в поточному шляху.
Nabi KAZ

Ви також можете просто ввести mirrorдля поточного каталогу та його підпапок.
Майкл

17

Якщо ви можете використовувати scpзамість цього ftp, -rваріант зробить це за вас. Я хотів би перевірити, чи можна використовувати більш сучасний механізм передачі файлів, ніж FTP.


2
Я проголосував за це, тому що це була саме моя перша думка, хоча вона абсолютно не відповідає на питання як є.
metao

Який ви пропонуєте @ greg-hewgill? У мене схожа проблема
Міхал Гонда,

1
scpвсе одно буде намагатися використовувати ssh, який не працюватиме, якщо у вас є лише FTP-дані. Здається, що я дивно реагую на коментар 2008 року, кажучи, що технологія, з якою я застряг, не сучасна :( Старий добрий 2008 рік, мені було 18 років, коли ви опублікували свій коментар.
aexl


7

Існує 'ncftp', який доступний для установки в Linux. Це працює за протоколом FTP і може використовуватися для рекурсивного завантаження файлів і папок. працює на Linux. Використовується і працює нормально для рекурсивної передачі папок / файлів.

Перевірте це посилання ... http://www.ncftp.com/


2
ncftp працює і над Windows
Ілля,

Я люблю ncftp! Дякую.
Jocull

3

Якщо ви можете, я настійно пропоную вам tarі bzip(або gzip, що б не плавав ваш човен), каталог на віддаленій машині - для каталогу будь-якого значного розміру, економія пропускної здатності, ймовірно, буде вартим часу, щоб зібрати / розпакувати.


Можливо, у 2008 році, але в 2013 році пропускна здатність більше не має значення, і у вас може бути FTP, але не доступ до консолі :-)
Daniel W.

3

Якщо ви хочете дотримуватися командного рядка FTP, спробуйте NcFTP. Тоді ви можете використовувати get -R, щоб рекурсивно отримати папку. Ви також отримаєте завершення.



1

Не слід використовувати ftp. Начебто telnetце не використання захищених протоколів, а паролі передаються чітким текстом. Це робить третім сторонам дуже легко захопити ваше ім’я користувача та пароль.

Щоб скопіювати віддалені каталоги віддалено, кращі такі параметри:

  • rsyncє найкращим інструментом, якщо ви можете ввійти через систему ssh, оскільки він копіює лише відмінності і може легко перезапустити посередині, якщо з’єднання перерветься.

  • ssh -r є другим найкращим варіантом рекурсивного копіювання структур каталогів.

Подивитися:

  • сторінка людини rsync

  • ssh man сторінку


не захищено, просто ftp
JosFabre

це 2015. Не слід використовувати FTP.
Тіло

1
Я згоден. І завжди слід давати пропозиції щодо кращої безпеки. Але питання
стосувалося

Я з повагою не згоден. Вони використовують неправильний інструмент для роботи. Вони повинні навчитися використовувати безпечні та сучасні інструменти, а не 1980-х футів. Більш конкретно, більше ніхто не повинен запускати ftp-сервер: P
Tilo

4
Вибачте, але лише минулого тижня я звертався до сервера, який мав лише FTP-з'єднання. Моє завдання полягало в тому, щоб мігрувати подалі від нього.
Антті Хаапала

-6

перемикання підказки командою PROMPT.

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

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *

8
Проголосований нижче: mget не є рекурсивним.
Ленс Клівленд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.