Вопрос или проблема
Я пытаюсь синхронизировать директории с lftp, но не хочу загружать файлы таких типов, как .mp4 и .swf, которые известны своим большим размером. Но у меня возникают проблемы с регулярными выражениями, а также, похоже, с exclude-glob. Обе команды загружают все файлы.
Что я пробовал:
/usr/local/bin/lftp -u user,pass -e 'mirror -x ^(\.mp4|\.swf)$ $src $dest' ftp.host
&&
/usr/local/bin/lftp -u user,pass -e 'mirror -X swf $src $dest' ftp.host
В первом случае вам нужно экранировать вертикальную черту (|), так как в lftp это также специальный символ (также используйте двойные кавычки для подстановки переменных src и dest, экранируйте обратный слеш и знак доллара, чтобы предотвратить их интерпретацию оболочкой):
/usr/local/bin/lftp -u user,pass -e "mirror -x '^(\\.mp4|\\.swf)\$' $src $dest" ftp.host
Во втором случае вам нужно использовать шаблоны glob, например, так:
/usr/local/bin/lftp -u user,pass -e "mirror -X *.mp4 -X *.swf $src $dest" ftp.host
В любом случае я рекомендую сначала протестировать команду mirror вручную, а затем автоматизировать ее.
Ответ или решение
Задача исключения определённых типов файлов при использовании lftp для зеркального копирования директорий является общей потребностью для специалистов, работающих с большими объемами данных. Часто встречающиеся крупные файлы, такие как .mp4 и .swf, нужно исключать из загрузки, чтобы оптимизировать процесс передачи данных и сэкономить сетевые ресурсы. Для решения этой задачи важно правильно использовать команду mirror
с флагами -x
и -X
в lftp.
Теория
Lftp — это мощный инструмент для передачи файлов через FTP, который поддерживает множество опций и настроек для гибкого управления процессом загрузки и передачи данных. Зеркальное копирование (команда mirror
) в lftp позволяет синхронизировать содержимое удалённого FTP-сервера с локальным каталогом и используется для поддержания актуальности данных. Одной из ключевых задач при этом является фильтрация нужных и ненужных файлов.
В lftp для исключения файлов могут использоваться два ключевых параметра:
-x
: позволяет использовать регулярные выражения для исключения файлов по определённым паттернам.-X
: позволяет использовать шаблоны (globbing patterns) для исключения файлов.
Пример
Рассмотрим пример использования регулярных выражений и шаблонов при исключении файлов.
- Регулярные выражения
Регулярные выражения дают большую гибкость, как показано в следующем примере:
/usr/local/bin/lftp -u user,pass -e "mirror -x '^(\\.mp4|\\.swf)$' $src $dest" ftp.host
В этом сценарии:
-x '^(\\.mp4|\\.swf)$'
: используется для указания того, что файлы с расширениями .mp4 и .swf не должны загружаться. Синтаксис также предполагает использование двойных кавычек и экранирование специального символа$
для предотвращения его интерпретации оболочкой.
Регулярные выражения в lftp работают следующим образом: ^
указывает на начало строки, \\.
экранирует точку, чтобы обозначать её как символ, а не как специальный знак регулярного выражения, и \$
обозначает конец строки.
- Glob-шаблоны
Шаблоны облегчают задачу, когда необходимо исключить файлы по простым маскам:
/usr/local/bin/lftp -u user,pass -e "mirror -X *.mp4 -X *.swf $src $dest" ftp.host
В этом сценарии:
-X *.mp4 -X *.swf
: применяется для исключения файлов по расширению. Это более прямой способ исключения файлов с известными расширениями.
Применение
При настройке lftp для зеркального копирования директорий необходимо внимательно тестировать команду с использованием вручную подобных конфигураций. Рекомендуется проводить тестирование в контролируемой среде перед автоматизацией процесса, чтобы убедиться, что исключение файлов работает как предполагалось. После установки и проверки команд можно будет безбоязненно включить их в автоматизированные скрипты, что существенно упростит управление процессом передачи данных.
Заключение
Правильная настройка lftp для исключения файлов может значительно повысить эффективность работы с данным инструментом. Заблаговременное исключение файлов с нежелательными расширениями, такими как .mp4 и .swf, позволяет сэкономить ресурсы и увеличить скорость копирования необходимой информации. Применение регулярных выражений и шаблонов предназначается для различных сценариев применения, где либо необходима высокая точность, либо простота в применении. Поэтому каждый специалист IT должен выбрать и протестировать наиболее подходящий для своих нужд подход.