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