LFTP исключить только конкретную папку

Вопрос или проблема

У меня есть папка с одним и тем же именем в разных подкаталогах, но при зеркалировании я хочу исключить только определенную папку.

Пример:

У меня есть директория “123” в разных директориях

./abc/123/
./abc/xyz/123/
./xxx/123/
./abc/yyy/123/

Я хочу исключить ./abc/123/ только, но если я использую команду ниже, то исключаются все случаи

lftp  -p 22 -e 'mirror --exclude ./abc/123/ './abc' '/var/www/' ; exit' sftp://[email protected]

Если указать ^\, только верхний уровень, похоже, исключается.

Пример:

home/
 ├ img/
 │ └ dummyA.png
 └ upload/
   └ img/
     └ dummyB.png

В случае приведенной выше структуры директории

mirror --reverse -x ^\img/ --delete /home /site
site/
 └ upload/
   └ img/
     └ dummyB.png

Ответ или решение

Для решения вашей задачи по исключению конкретной папки при использовании LFTP, нам следует обратить внимание на особенности команды mirror и синтаксиса для исключения директорий. Как вы правильно заметили, при использовании стандартного метода с --exclude, все совпадения с указанным путём будут исключены из зеркалирования, что не является желаемым результатом в вашем случае.

Проблема

Ваша структура каталогов выглядит следующим образом:

./abc/123/
./abc/xyz/123/
./xxx/123/
./abc/yyy/123/

Вы хотите исключить только папку ./abc/123/, но при использовании команды:

lftp -p 22 -e 'mirror --exclude ./abc/123/ './abc' '/var/www/' ; exit' sftp://[email protected]

вы исключаете все папки с именем 123, что невозможно сделать, если использовать ограничение по пути без уточнения уровня вложенности.

Решение

Для достижения желаемого результата необходимо использовать более точные регулярные выражения или изменить подход к исключению. Есть несколько вариантов, которые могут помочь вам исключить только конкретную директорию.

lftp -p 22 -e 'mirror --exclude ^abc/123/ --exclude-vcs --delete './abc' '/var/www/' ; exit' sftp://[email protected]

В этом примере используется --exclude ^abc/123/, где знак ^ указывает на то, что исключение применяется только к пути, начинающемуся с abc/123/. Это позволяет ограничить исключение только для этого конкретного уровня.

Дополнительное объяснение:

  • --exclude: указывает, какие файлы или директории исключить. В вашем случае, вы используете это для исключения определённой директории.
  • ^: указывает на начало строки. Это необходимо, чтобы не исключать другие папки с похожими именами, находящимися на более глубоком уровне.

Замечания по синтаксису

Убедитесь, что вы правильно указываете путь в правильном формате. Некорректное указание пути может привести к исключению ненужных директорий.

В результате правильно составленная команда позволит вам исключить из зеркалирования только указанную директорией, оставляя остальные каталоги с именем 123 нетронутыми.

Вывод

Использование LFTP с правильными параметрами команды mirror и исключениями позволяет гибко настраивать процесс синхронизации и избегать ненужного исключения директорий. Это решение поможет вам в управлении вашей файловой структурой при использовании LFTP в различных сценариях.

Оцените материал
Добавить комментарий

Капча загружается...