Використовуючи 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.