Я хочу скопировать все файлы и папки с одного хоста на другой. Файлы на старом хосте находятся в/var/www/html, и у меня есть только FTP-доступ к этому серверу, и я не могу заархивировать все файлы. Регулярное подключение к старому хосту через FTP приводит меня в папку/home/admin.
Я попытался выполнить следующую команду с моего нового сервера:
wget -r ftp://username:[email protected]
Но все, что я получаю, это составленный файл index.html.
Какой правильный синтаксис для рекурсивного использования wget по FTP?
Пытаться -m
за --mirror
wget -m ftp://username:[email protected]
Вы правильно поняли, вам просто нужен трейлинг * в конце:
wget -r ftp://username:[email protected]/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'
Он автоматически обрабатывает рекурсию в каталоги и позволяет указать исходный каталог удаленного источника, из которого загружаются данные.
Проверьте приведенную ниже команду 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
: Для игнорирования количества родительских каталогов. Значение этой опции будет отличаться для вашей команды.
Вы можете проверить, выполнив вышеуказанную команду.
Вы можете использовать 'curlftpfs - монтировать FTP-хост как локальный каталог', а после монтирования вы можете использовать обычные файловые инструменты, такие как 'cp -r'.
Используйте -m вместо -r из-за глубины рекурсии.
http://www.editcorp.com/Personal/Lars_Appel/wget/wget_2.html#SEC11
Должен работать попробуйте:
wget -r ftp://ftp:[email protected]/tst/
Использование:
wget -m ftp://192.168.0.1
и он будет отражать все файлы и папки.
Как я уже сказал, при входе через FTP я попадаю в папку/home/admin, а нужные мне файлы находятся в/var/www/html.
Я думаю, что это будет работать в вашем случае:
wget -r ftp://192.168.0.1/../../var/www/html
Это правильный синтаксис. Не уверен, почему вы не получаете ожидаемых результатов.
Как всегда, есть больше чем один способ сделать это. Попробуйте ncftp, в частности ncftpget
Я могу понять, пытаетесь ли вы сбросить это в cron или что-то еще, но почему бы просто не зайти по ftp на сервер с вашим обычным клиентом и mget *? Это может быть более быстрый путь к успеху.
Я сталкивался с хостингом Windows с именем пользователя brinkster/username, поэтому wget выдает ошибку, если вы используете синтаксис:
wget -m ftp://brinkster/username:[email protected]
Чтобы обойти это, используйте
wget -m ftp://brinkster%2Fusername:[email protected]
Мне пришлось столкнуться с этим с Windows хостингом @ brinkster.