С GNU tar вы также можете использовать опцию --exclude
, чтобы исключить файлы на основе имен.
$ tar --exclude "*1*" --exclude "*2*" -cvf foo.tar test/
test/
test/3/
Существует также -X
или --exclude-from
, который берет файл, из которого считываются шаблоны исключения.
Несмотря на то, что find -not -path "*1*"
, это также исключает файлы, имена которых содержат 1
или 2
. Чтобы пропустить только каталоги, имена которых соответствуют шаблону, используйте find -prune
и tar --no-recursion
:
$ touch test/3/blah.1
$ find test/ -type d \( -name "*1*" -o -name "*2*" \) -prune -o -print |
tar cvf test.tar --files-from - --no-recursion
test/
test/3/
test/3/blah.1
(как минимум GNU tar и FreeBSD tar есть -- без рекурсии
)