Використовуючи wget для рекурсивного завантаження цілих каталогів FTP


93

Я хочу скопіювати всі файли та папки з одного хоста на інший. Файли на старому хості сидять у / var / www / html, і я маю лише FTP доступ до цього сервера, і я не можу TAR всі файли. Регулярне підключення до старого хоста через FTP приводить мене до папки / home / admin.

Я спробував запустити таку команду з нового сервера:

wget -r ftp://username:password@ip.of.old.host

Але все, що я отримую, - це створений файл index.html.

Який правильний синтаксис для використання wget рекурсивно через FTP?


2
Зауважте, що за замовчуванням wget -r має максимальну глибину рекурсії 5; якщо у вас є більш глибокі підкаталоги, вони будуть ігноруватися, якщо ви не зміните це (див. -l на сторінці man).
— mikewaters

Відповіді:


125

Спробуйте -mдля--mirror

wget -m ftp://username:password@ip.of.old.host

15
З міркувань безпеки було б корисно використовувати, --ask-passwordщоб уникнути збереження пароля history.
— контрольна сума

Це так круто. Працював як шарм ..
— Самбхав Шарма

Це має бути прийнятою відповіддю (для кращої наочності).
— Бгонді

це не включає шлях до каталогу для завантаження, я думаю, @Formoda відповідь краще
— Васім А.

@WasimA., Ви можете просто додати сюди шлях до каталогу:wget -m ftp://username:password@ip.of.old.host/mydir/
— Alex Che

37

Ви маєте це право, вам просто потрібна остання * в кінці:

wget -r ftp://username:password@1.2.3.4/dir/*

Для спільних серверів можна використовувати так:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Оскільки у більшості спільних серверів є ftp-ім'я користувача на зразок ім'я користувача @ ім'я хоста, тож перша команда wget не працює, а друга команда працює добре.


1
Це займе лише один каталог углиб. Краще використовувати прапор -m
— SvennD,

в деяких випадках друга команда не працює через простір. Ви можете використовувати першу команду для подібного хостингу. ** wget -r ftp: / / username% 40host: password @ host / dir / **
— Wasim A.

Примітка: ви повинні використовувати або, -mабо -r -l inf-r має глибину рекурсії за замовчуванням 5. Див. Gnu.org/software/wget/manual/…
— ndemou

7

Крім wget, ви також можете використовувати lftp в режимі сценарію. Наступна команда відобразить вміст даного віддаленого каталогу FTP у даному локальному каталозі, і він може бути поміщений у завдання cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Він автоматично обробляє рекурсію в каталоги та дозволяє вказати вихідний вихідний вихідний каталог з якого завантажувати дані.


5

Ви можете використовувати 'curlftpfs - монтуйте ftp-хост як локальний каталог', і, як тільки він змонтується, ви можете використовувати звичайні файлові інструменти, такі як 'cp -r'.


curlftpfsЗараз у вас є основні проблеми з продуктивністю, якщо ви не погіршитесьlibcurl3-gnutls
— Hengjie

5

Перевірте наведену нижче команду wget, щоб рекурсивно завантажувати дані з FTP.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: Призначений для рекурсивного завантаження.

-np: Не має жодного батьківського зростання.

-nH: Призначений для відключення створення каталогу, що має ім’я, таке ж, як URL, тобто abc.xyz.com

--cut-dirs: Призначений для ігнорування кількості батьківських каталогів. Значення цього параметра буде відрізнятися для вашої команди.

Ви можете перевірити, виконавши вищевказану команду.




2

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

wget -m ftp://192.168.0.1

і він відобразить усі файли та папки.


Як я вже сказав, вхід через FTP переносить мене в папку / home / admin, а потрібні мені файли знаходяться в / var / www / html. Отже, коли я запускаю запропоновану вами команду, я отримую лише вміст / home / admin Я спробував запустити його з 192.168.0.1/var/www/html , але потім він намагається CWD / home / admin / var / www / html. Як змусити його перейти до цієї папки з кореня?

Я не маю досвіду з цією конкретною проблемою, але ви можете спробувати створити символьне посилання на / var / www / html під своїм домом. Тоді ви можете скористатися такою адресою, як 192.168.0.1/html
— престомація

Я спробував створити симпосилання, але це призвело до того, що wget створив аналогічне посилання на моєму локальному пристрої.

1

Це правильний синтаксис. Не впевнений, чому ви не отримуєте очікуваних результатів.

Як завжди, це існує не один спосіб. Спробуйте ncftp, зокрема ncftpget


Я не можу встановити більше програмного забезпечення на своєму новому сервері. Чи не слід мені казати wget завантажувати всі файли з / var / www / html? Я спробував wget -r ім'я користувача: password@ip.of.old.host/var/www/html, але у мене в каталозі не знайдено помилки.

1

Я можу зрозуміти, якщо ви намагаєтеся скинути це в cron або щось подібне, але чому б просто не перейти на сервер зі своїм звичайним клієнтом і mget *? Це може бути швидшим шляхом до успіху.


Я спробував mget *, але він не працював із підпапками, кажучи, що локальна підпапка не існує. Чи є спосіб змусити його автоматично створювати локальні папки?

Залежно від вашого клієнта, перемикач -r зазвичай робить трюк. IE: mget -r *
— dr.pooter

ммм. Стандартний ftp-клієнт AFAIK в Linux не призначений для рекурсивного пошуку каталогів. Я маю на увазі - немає варіанту -r. інші клієнти, такі як ncftp або lftp, підтримують рекурсивне пошук, але вони, як правило, недоступні.
— Стенн

1

Як я вже говорив, вхід через FTP переводить мене в папку / home / admin, а потрібні мені файли знаходяться в / var / www / html

Я думаю, що це спрацює у вашому випадку:

wget -r ftp://192.168.0.1/../../var/www/html

0

Я натрапив на хостинг Windows з ім'ям імені як brinkster / username, тому wget видасть помилку, якщо ви використовуєте синтаксис:

wget -m ftp://brinkster/username:password@ip.of.the.host

Щоб пройти це, використовуйте

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

Мені довелося зіткнутися з цим Windows з хостингом @ brinkster.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename зробить роботу, або ви можете додати * замість введення імені файлу: змушує wget подумати про порт, який у вашому випадку недійсний.


Ця відповідь на чотирирічне запитання з декількома схваленими відповідями не пропонує нічого нового і навіть не вимагає рекурсивної копії.
— Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.