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

<p>я хочу скопировать все файлы и папки с одного хоста на другой. файлы на старом хосте находятся в/var/www/html, и у меня есть только ftp-доступ к этому серверу, и я не могу заархивировать все файлы. регулярное подключение к старому хосту через ftp приводит меня в папку/home/admin.</p><p>я попытался выполнить следующую команду с моего нового сервера:</p><pre><code>wget -r ftp://username:password@ip.of.old.host </code></pre><p>но все, что я получаю, это составленный файл index.html.</p><p>какой правильный синтаксис для рекурсивного использования wget по ftp?</p>

<p>пытаться <code>-m</code> за <code>--mirror</code></p><pre><code>wget -m ftp://username:password@ip.of.old.host </code></pre>

<p>вы правильно поняли, вам просто нужен трейлинг * в конце:</p><pre><code>wget -r ftp://username:password@1.2.3.4/dir/* </code></pre><p>для общих серверов вы можете использовать так:</p><pre><code>wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password </code></pre><p>поскольку большинство общих серверов имеет ftp-username, например, username @ hostname, первая команда wget не работает, а вторая работает нормально.</p>

<p>помимо wget вы также можете использовать <strong>lftp</strong> в режиме сценария. следующая команда отобразит содержимое заданного удаленного каталога ftp в заданный локальный каталог, и его можно поместить в задание cron:</p><pre><code>lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit' </code></pre><p>он автоматически обрабатывает рекурсию в каталоги и позволяет указать исходный каталог удаленного источника, из которого загружаются данные.</p>

<p>проверьте приведенную ниже команду wget для рекурсивной загрузки данных с ftp.</p><pre><code>wget --user="<user-name>" --password="<password>" -r -np -nh --cut-dirs=1 --reject "index.html*" "<url to download files>" </code></pre><p><code>-r</code>: для рекурсивной загрузки.</p><p><code>-np</code>: для родительского возраста нет.</p><p><code>-nh</code>: для отключения создания каталога, имя которого совпадает с именем url, т.е. abc.xyz.com</p><p><code>--cut-dirs</code>: для игнорирования количества родительских каталогов. значение этой опции будет отличаться для вашей команды.</p><p>вы можете проверить, выполнив вышеуказанную команду.</p>

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

<p>используйте -m вместо -r из-за глубины рекурсии.</p><p> <a href="http://www.editcorp.com/personal/lars\_appel/wget/wget\_2.html#sec11">http://www.editcorp.com/personal/lars\_appel/wget/wget\_2.html#sec11</a> </p>

<p>должен работать попробуйте:</p><pre><code>wget -r ftp://ftp:ftp@ftp.sunet.se/tst/ </code></pre>

<p>использование:</p><pre><code>wget -m ftp://192.168.0.1 </code></pre><p>и он будет отражать все файлы и папки.</p>

<blockquote> <p>как я уже сказал, при входе через ftp я попадаю в папку/home/admin, а нужные мне файлы находятся в/var/www/html.</p> </blockquote><p>я думаю, что это будет работать в вашем случае:</p><pre><code>wget -r ftp://192.168.0.1/../../var/www/html </code></pre>

<p>это правильный синтаксис. не уверен, почему вы не получаете ожидаемых результатов.</p><p>как всегда, есть больше чем один способ сделать это. попробуйте ncftp, в частности ncftpget</p>

<p>я могу понять, пытаетесь ли вы сбросить это в cron или что-то еще, но почему бы просто не зайти по ftp на сервер с вашим обычным клиентом и mget *? это может быть более быстрый путь к успеху.</p>

<p>я сталкивался с хостингом windows с именем пользователя brinkster/username, поэтому wget выдает ошибку, если вы используете синтаксис:</p><pre><code>wget -m ftp://brinkster/username:password@ip.of.the.host </code></pre><p>чтобы обойти это, используйте</p><pre><code>wget -m ftp://brinkster%2fusername:password@ip.of.old.host </code></pre><p>мне пришлось столкнуться с этим с windows хостингом @ brinkster.</p>