Исключение общих подкаталогов при создании 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 можно обменять на любое другое общее расширение, и это все равно должно работать.