Моя первая мысль при чтении вашего вопроса была: «Это похоже на работу для 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/
Объяснение:
- Команда
find
найдет все файлы (-type f
) на удаленном FTP-сервере, которые были изменены <= 20 дней назад (-mtime 20
).
- Команда
cp
скопирует эти файлы
- Если они новее, чем соответствующий файл в целевой директории (
-u
)
- Сохранение их родительских каталогов (
--parents
)
cd /mnt/myftp
необходим для того, чтобы cp
создал правильные родительские каталоги в папке назначения. Если вы не cd
- диска в каталог на первом, cp
будет создавать папки , как это:
~/foo/mnt/myftp/bar
Вместо этого:
~/foo/bar
В совокупности эти команды / опции должны иметь желаемый эффект зеркального отображения удаленного сервера при игнорировании старых файлов.
Предостережения:
Это относительно упрощенный сценарий. Если у вас есть более продвинутые требования (все те опции wget
, которые вы пропустили), вы можете взглянуть на man cp
или, для более продвинутых опций, на man rsync
. Вы сможете сделать по существу то же самое в rsync
передавая результат команды find
с помощью rsync
«s --include-from
варианта.
Если вы обновите свой вопрос более конкретными требованиями (сохранение ссылок, жестких ссылок, временных отметок, пользовательских привилегий, рекурсии каталогов и т.д.), Я смогу изменить свой ответ в соответствии с ними.