Вопрос или проблема
У меня есть папка с одним и тем же именем в разных подкаталогах, но при зеркалировании я хочу исключить только определенную папку.
Пример:
У меня есть директория “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 в различных сценариях.