Использование 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'

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

zappan
источник
5

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

chmeee
источник
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: Для игнорирования количества родительских каталогов. Значение этой опции будет отличаться для вашей команды.

Вы можете проверить, выполнив вышеуказанную команду.

AVJ
источник
2

Должен работать, попробуйте:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/
rkthkr
источник
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 *? Это может быть более быстрый путь к успеху.

dr.pooter
источник
Я попробовал 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
kubanczyk
источник
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 думать о порте, который в вашем случае недопустим.

Кхушвант Сингх
источник
Этот ответ на четырехлетний вопрос с несколькими ответами, на которые проголосовали против, не предлагает ничего нового и даже не содержит требования к рекурсивной копии.
Свен