Моя первая мысль при чтении вашего вопроса была: «Это похоже на работу rsync!». К сожалению, хотя он rsyncдействительно может прыгать с высоких зданий за один проход, он не может работать с FTP. Если у вас есть ssh доступ к зеркалу, все будет намного проще.
Предполагая, что вы этого не сделаете, вы можете попробовать монтировать удаленный каталог FTP локально, а затем вы можете использовать простой cp(вдохновленный этим ):
Установите curlftpfs. Если вы находитесь в дистрибутиве на основе Debian (я предполагаю, что вы используете Linux, так как вы упомянули wget), запустите
apt-get install curlftpfs
Создать локальный путь монтирования
mkdir -p /mnt/myftp
Смонтируйте целевой FTP-сайт, используя curlftpfs
curlftpfs -o allow_other ftp://user:pass@ftp.mirror.com /mnt/myftp
Используйте cpдля копирования файлов, передав findв качестве аргумента команду:
cd /mnt/myftp && \
cp -v --parents `find . -type f -mtime -20` ~/foo/
Объяснение:
В совокупности эти команды / опции должны иметь желаемый эффект зеркального отображения удаленного сервера при игнорировании старых файлов.
Предостережения:
Это относительно упрощенный сценарий. Если у вас есть более продвинутые требования (все те wgetопции , которые вы оставили вне) вы можете посмотреть на man cpили, для более dvanced вариантов man rsync. Вы сможете сделать по существу то же самое в rsyncпропускании результата findкоманды , используя rsync«s --include-fromварианта.
Если вы обновите свой вопрос более конкретными требованиями (сохранение ссылок, жестких ссылок, временных отметок, пользовательских привилегий, рекурсии каталогов и т. Д.), Я смогу изменить свой ответ в соответствии с ними.
-c(продолжение) помочь?