Использование wget для рекурсивной загрузки целых каталогов FTP


93

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

Я попытался выполнить следующую команду с моего нового сервера:

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

Но все, что я получаю, это составленный файл index.html.

Какой правильный синтаксис для использования Wget рекурсивно по FTP?


2
Обратите внимание, что по умолчанию wget -r имеет максимальную глубину рекурсии 5; если у вас есть более глубокие подкаталоги, они будут игнорироваться, если вы не измените это (см. -l на странице руководства).
mikewaters

Ответы:


125

Попробуй -mдля--mirror

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

15
По соображениям безопасности было бы хорошо использовать, --ask-passwordчтобы избежать сохранения пароля history.
контрольная сумма

Это так круто. Работал как шарм ..
Самбхав Шарма

Это должен быть принятый ответ (для лучшей наглядности).
Bgondy

он не включает путь к каталогу для загрузки, я думаю, что @Formoda ответ лучше
Васим А.

@WasimA., Вы можете просто добавить сюда путь к каталогу:wget -m ftp://username:password@ip.of.old.host/mydir/
Алекс Че

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-username что-то вроде username @ hostname, первая команда wget не работает, а вторая работает нормально.


1
Это может привести только к одному каталогу. Лучше использовать флаг -m
SvennD

в некоторых случаях вторая команда не работает из-за недостатка места. Вы можете использовать первую команду для общего хостинга, как это. ** wget -r ftp: / / username% 40host: пароль @ host / dir / **
Васим А.

Примечание: Вы должны использовать либо -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
понизите

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 -r ftp://ftp:ftp@ftp.sunet.se/tst/

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
prestomation

Я попытался создать символическую ссылку, но в результате wget создал похожую символическую ссылку на моем локальном компьютере.

1

Это правильный синтаксис. Не уверен, почему вы не получаете ожидаемых результатов.

Как всегда, есть больше чем один способ сделать это. Попробуй ncftp, в частности ncftpget


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

1

Я могу понять, пытаетесь ли вы сбросить это в cron или что-то еще, но почему бы просто не зайти по ftp на сервер с вашим обычным клиентом и 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.