2

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

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

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

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

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

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

1 ответ1

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 - диска в каталог на первом, cp будет создавать папки , как это:

    ~/foo/mnt/myftp/bar
    

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

    ~/foo/bar
    

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .