Я хочу скопировать все файлы и папки с одного хоста на другой. Файлы на старом хосте находятся в / 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 думать о порте, который недопустим в вашем случае.