Я использую wget для зеркалирования файлового архива ftp.
Это моя команда:
wget -m $mirror
(удалены все ненужные параметры)
Пока все в порядке, все отличия от онлайн-архива будут синхронизированы.
Но теперь есть скрипт, который удаляет файлы из моей копии, так как они не нужны. Так что, если я запустлю wget снова, он снова загрузит эти файлы (несколько гигабайт!).
Есть ли возможность исключить из загрузки файлы, которые старше определенной метки времени?
Я уже посмотрел на -A -R -I -X
параметры, но они, кажется, работают только с именами файлов ...
-c
(продолжение) помочь?Ответы:
Моя первая мысль при чтении вашего вопроса была: «Это похоже на работу
rsync
!». К сожалению, хотя онrsync
действительно может прыгать с высоких зданий за один проход, он не может работать с FTP. Если у вас есть ssh доступ к зеркалу, все будет намного проще.Предполагая, что вы этого не сделаете, вы можете попробовать монтировать удаленный каталог FTP локально, а затем вы можете использовать простой
cp
(вдохновленный этим ):Установите curlftpfs. Если вы находитесь в дистрибутиве на основе Debian (я предполагаю, что вы используете Linux, так как вы упомянули
wget
), запуститеСоздать локальный путь монтирования
Смонтируйте целевой FTP-сайт, используя
curlftpfs
Используйте
cp
для копирования файлов, передавfind
в качестве аргумента команду:Объяснение:
find
найдет все файлы (-type f
) на удаленном FTP-сервере, которые были изменены <= 20 дней назад (-mtime 20
).cp
скопирует эти файлы-u
)--parents
)Этот
cd /mnt/myftp
бит необходим дляcp
создания правильных родительских каталогов в папке назначения. Если выcd
сначала не заходите в каталог ftp,cp
создайте такие папки:Вместо этого:
В совокупности эти команды / опции должны иметь желаемый эффект зеркального отображения удаленного сервера при игнорировании старых файлов.
Предостережения:
Это относительно упрощенный сценарий. Если у вас есть более продвинутые требования (все те
wget
опции , которые вы оставили вне) вы можете посмотреть наman cp
или, для более dvanced вариантовman rsync
. Вы сможете сделать по существу то же самое вrsync
пропускании результатаfind
команды , используяrsync
«s--include-from
варианта.Если вы обновите свой вопрос более конкретными требованиями (сохранение ссылок, жестких ссылок, временных отметок, пользовательских привилегий, рекурсии каталогов и т. Д.), Я смогу изменить свой ответ в соответствии с ними.
источник