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) персонаж.

Другие вопросы по тегам