Na verdade, o tar pode excluir arquivos com --anchored
patterns match file name start
Mas então você tem que escrever todo o caminho do arquivo (que também muda com cd
):
$ cd /where/source/lives
$ tar -cf master.zip --anchored --exclude={source/install.sh,README.md} -- *
Se você precisar de alguma flexibilidade, use o find.
A lista de arquivos a serem compactados pode ser criada com este comando,
o ! -name README.md
rejeita o arquivo README.md
de base:
$ path="/path/to/files"
$ find "$path/" ! -path "$path"/README.md -print
Cuidado com as barras /
, elas são importantes.
Se isso contiver a lista correta de arquivos a serem compactados, basta injetar isso em tar
(adicione 0
a -print
e crie o comando tar
):
find "$path/" ! -path "$path"/README.md -print0 |
tar --no-recursion --null -T- --exclude=install.sh -v -cf master.zip
Observe que tar
está usando a opção --null
para corresponder à -print0
de find
.
Como find
está fornecendo toda a recursão necessária, use a opção --no-recursion
do tar.
Além disso, o arquivo install.sh
ainda está sendo excluído em tar
(que também pode ter sido removido com find
, mas isso é apenas uma preferência pessoal).
Na produção, remova a opção -v
para obter um comando tar menos detalhado.
Para descomprimir (em vez de comprimir como acima), use isto:
tar -xf master.zip --anchored --exclude={source/install.sh,README.md}
Ou, se você usar a segunda opção para criar o arquivo compactado, os arquivos excluídos não estarão dentro de master.zip
e tudo o que você precisa fazer é:
tar -xf master.zip