Назад | Перейти на главную страницу

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

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

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

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

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

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

Пытаться -m для --mirror

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

Вы правы, вам просто нужен завершающий * в конце:

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

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

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

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

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

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

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

Используйте -m вместо -r из-за глубины рекурсии.

http://www.editcorp.com/Personal/Lars_Appel/wget/wget_2.html#SEC11

Если сработает, попробуйте:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

Использование:

wget -m ftp://192.168.0.1

и он будет отображать все файлы и папки.

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

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

Я могу понять, пытаетесь ли вы сбросить это в cron или что-то в этом роде, но почему бы просто не использовать ftp на сервере с вашим обычным клиентом и mget *? Это может быть более быстрым путем к успеху.

Как я уже сказал, вход через FTP переводит меня в папку / home / admin, а нужные мне файлы находятся в / var / www / html.

Думаю, в вашем случае это сработает:

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

Я наткнулся на хостинг 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 hosting @ brinkster.

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