como excluir diretórios e arquivos compactando um diretório?


32

Eu preciso compactar um diretório excluindo algum subdiretório e arquivo; Eu usei isso:

zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"

sem sucesso; node_modulesé uma pasta principal enquanto bower_componentsestá dentro do aplicativo de pastas


qual é o seu resultado e qual é o resultado esperado?
DEN

Deseja excluir todos os subdiretórios ou apenas alguns deles?
Sergiy Kolodyazhnyy

Respostas:


36

Simplesmente adivinho o que você quer.

-x ".*"

excluir todos os arquivos que começam com um ponto

faça como:

-x .\*

excluir todos os arquivos (com um ponto no nome do arquivo)

faça como:

-x \*.\*

-

-x "app/bower_components" -x "node_modules"

excluir este diretório e todos os arquivos nele

faça como:

-x app/bower_components/\* -x node_modules/\*

-

-x "*.zip"

excluir todos os arquivos zip

faça como:

-x \*.zip

Você exclui node_modules duas vezes


2
graças eu consegui, utilizando diversas pós chegou a esse: zip -r * app / * -x \ app / bower_components / * -x \ node_modules / * -x * .zip
arpho

@arpho O seu comentário acima deve ser uma resposta como parece estar a trabalhar para mim ...
chesedo

7

Algo assim deve fazer o truque:

zip -r zipped.zip dir1/ -x */\.* *.git* \.* *.zip *.csv *.json *.rb *.bak *.swp *.back *.merge *.txt *.sh dir1/node_modules/**\* dir1/bower_components/**\* dir1/dist/**.*

Onde a seguir -xestá uma lista de diretórios e tipos de arquivo (extensão) a serem excluídos.


Agora que eu sei o que **\*é exclusão recursiva. Muito Obrigado.
Duc Tran

6

Supondo que seu diretório seja um repositório git (e, a julgar pela pergunta, é muito provável), você pode adicionar diretórios que deseja excluir ao .gitignorearquivo e usar o git archivecomando para compactar o conteúdo do seu diretório:

git archive --format=zip HEAD -o zipfile.zip

No seu exemplo, o .gitignorearquivo teria a seguinte aparência:

node_modules
app/bower_components

3

Isso funciona perfeito para mim no Ubuntu 16.04:

sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"

0

em todo projeto, pule node_modules como este:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.