Desejo compactar uma pasta recursivamente, mas excluir determinados diretórios ( temp/.hidden
no exemplo abaixo). Eu quero que o arquivo zip tenha uma pasta de nível superior que estaria temp
no exemplo abaixo, portanto, meu diretório de trabalho é temp
.
mkdir -p temp/subdir
touch temp/subdir/keepthisfile.txt
touch temp/excludethisfile.txt
mkdir temp/.hidden
touch temp/.hidden/exclude.txt
cd temp/
O código que tenho para conseguir o que quero é
zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden/* ../temp/.hidden/
Ou de forma mais concisa (sintaxe obtida de outro lugar online)
zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/*.hidden*
Posso ver por que isso funcionaria, mas não consigo ver por que o código abaixo não faz a mesma coisa (ou seja, por que preciso ../temp/*.hidden*
em vez de apenas ../temp/.hidden*
?)
zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden*
Seu shell se expande
../temp/.hidden*
antes de../temp/.hidden
executar o Zip; esse padrão não corresponde mais../temp/.hidden/exclude.txt
. Você deve citar o padrão, conforme recomendado pela página de manual do Zip:Obrigado! Tendo agora RFTM corretamente, minhas páginas de manual sugerem
Portanto, o código se torna zip -r temp.zip ../temp/ -x ../temp/exclude.txt ../temp/.hidden/\*
Eu prefiro a citação embora :)