Исключение общих подкаталогов при создании tarball

Я создаю tarball большой базы кода, управляемой в ClearCase. Каждый каталог имеет подкаталог с именем ".CC". Я хотел бы исключить их из своего tarball.

Я нашел Исключая каталог при создании файла .tar.gz, но исключая, что, как представляется, требуется передать каждый каталог .CC на commndline. Это нецелесообразно в моем случае.

Есть ли способ исключить каталоги, которые соответствуют определенному шаблону?

EDIT: Я не спрашиваю, как исключить определенный конечный список каталогов. Я спрашиваю, как исключить все каталоги, которые заканчиваются определенным шаблоном.

Ответ 1

Вместо ручного ввода --exclude 'root/a/.CC' --exclude 'root/b/.CC' ... вы можете ввести $(find root -type d -name .CC -exec echo "--exclude \'{}\'" \;|xargs)

Вы можете использовать любые шаблоны find, или даже использовать что-то вроде grep inbetween find и xargs.

Ответ 2

Следующий bash script должен сделать трюк. Он использует ответ, данный @Marcus Sundman.

#!/bin/bash

echo -n "Please enter the name of the tar file you wish to create with out extension "
read nam

echo -n "Please enter the path to the directories to tar "
read pathin

echo tar -czvf $nam.tar.gz
excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs`
echo $pathin

echo tar -czvf $nam.tar.gz $excludes $pathin

Это выведет нужную команду, и вы можете просто скопировать и вставить ее обратно. Возможно, более элегантный способ предоставить ее непосредственно в командной строке.

*. CC можно обменять на любое другое общее расширение, и это все равно должно работать.