Зеркалирование с помощью wget - исключить старые файлы


2

Я использую wget для зеркалирования файлового архива ftp.

Это моя команда:
wget -m $mirror
(удалены все ненужные параметры)

Пока все в порядке, все отличия от онлайн-архива будут синхронизированы.

Но теперь есть скрипт, который удаляет файлы из моей копии, так как они не нужны. Так что, если я запустлю wget снова, он снова загрузит эти файлы (несколько гигабайт!).

Есть ли возможность исключить из загрузки файлы, которые старше определенной метки времени?

Я уже посмотрел на -A -R -I -Xпараметры, но они, кажется, работают только с именами файлов ...


Есть ли -c(продолжение) помочь?
vonbrand

Нет, это не так. Я только что заметил, что ncftp будет решением - - - если не будет корпоративного брандмауэра: /
Nippey

Ответы:


0

Моя первая мысль при чтении вашего вопроса была: «Это похоже на работу rsync!». К сожалению, хотя он rsyncдействительно может прыгать с высоких зданий за один проход, он не может работать с FTP. Если у вас есть ssh доступ к зеркалу, все будет намного проще.

Предполагая, что вы этого не сделаете, вы можете попробовать монтировать удаленный каталог FTP локально, а затем вы можете использовать простой cp(вдохновленный этим ):

  1. Установите curlftpfs. Если вы находитесь в дистрибутиве на основе Debian (я предполагаю, что вы используете Linux, так как вы упомянули wget), запустите

    apt-get install curlftpfs 
    
  2. Создать локальный путь монтирования

    mkdir -p /mnt/myftp
    
  3. Смонтируйте целевой FTP-сайт, используя curlftpfs

    curlftpfs -o allow_other ftp://user:pass@ftp.mirror.com /mnt/myftp
    
  4. Используйте 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сначала не заходите в каталог ftp, cpсоздайте такие папки:

    ~/foo/mnt/myftp/bar
    

    Вместо этого:

    ~/foo/bar
    

В совокупности эти команды / опции должны иметь желаемый эффект зеркального отображения удаленного сервера при игнорировании старых файлов.

Предостережения:

Это относительно упрощенный сценарий. Если у вас есть более продвинутые требования (все те wgetопции , которые вы оставили вне) вы можете посмотреть на man cpили, для более dvanced вариантов man rsync. Вы сможете сделать по существу то же самое в rsyncпропускании результата findкоманды , используя rsync«s --include-fromварианта.

Если вы обновите свой вопрос более конкретными требованиями (сохранение ссылок, жестких ссылок, временных отметок, пользовательских привилегий, рекурсии каталогов и т. Д.), Я смогу изменить свой ответ в соответствии с ними.


Честно говоря, это хуже, чем Linux, но лучше, чем Windows: я нахожусь в рабочей среде, где Linux не разрешен (Сетевая политика и т. Д.), Поэтому я должен использовать Cygwin .... Я посмотрю, смогу ли я смонтировать вещи там и отправлять обратно на следующей неделе
Nippey

Нет монтирования файловых систем, кроме NTFS в Cygwin ... :(
Nippey
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.