tar - как исключить так: "/ путь /excludeRoot/**/directoryToExclude"
Я хотел бы исключить некоторые каталоги из резервной копии. Но не все с определенным именем - только те, которые лежат под указанным корневым каталогом. С rsync я бы использовал исключающую маску следующим образом:
/path/excludeRoot/**/directoryToExclude
что означает, что все каталоги с именем directoryToExclude лежащий ниже /path/excludeRoot будут исключены.
С другой стороны: каждый каталог с именем directoryToExclude но лежать в другом месте будут включены
Можно ли сделать это с помощью tar?
1 ответ
Это, к сожалению, не так просто, как --exclude Семейство вариантов недостаточно мощное.
Одним из подходов было бы получить список объектов с использованием внешней программы (скажем, find), а затем использовать -T Переключить, чтобы сказать tar, какие файлы / объекты должны быть включены.
Цитата из справочной страницы:
-T, --files-from FILE
get names to extract or create from FILE
Если имена файлов содержат специальные символы (и / или пробелы), я бы добавил --null в командную строку tar; для создания списка я бы также использовал -print0 с find - для разделения файлов /dirs с NUL (\000) персонаж.