Diretório zip Unix, mas excluiu subdiretórios específicos (e tudo dentro deles)

85

Estou tentando compactar um diretório (no Unix via SSH), mas preciso excluir alguns subdiretórios (e todos os arquivos e diretórios contidos neles).

Até agora eu tenho isso:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

Isso parece não funcionar.

Eu também tentei

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

No entanto, isso ainda incluirá subdiretórios dentro de ignoreDir1 e ignoreDir2.

A estrutura do subdiretório nos diretórios que eu quero excluir é bastante substancial, então não posso simplesmente adicionar cada diretório ao argumento -x.

Alguém sabe como fazer isso?

    
por sulman 19.07.2011 / 12:19

7 respostas

92

Eu estava tão perto!

O comando que preciso é:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
    
por 19.07.2011 / 12:32
55

Para o meu sistema em particular, a fim de excluir um diretório, tive que colocar aspas nos meus diretórios excluídos e funcionou como um encanto:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

Notas:

- excluiu o diretório a ser excluído e todos os arquivos dentro dele.

- Você deve usar o caminho completo para os diretórios que deseja excluir!

    
por 31.10.2012 / 12:43
6

O seguinte fará

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1/ignoreDir2\*

O que você precisa do ** para @sulman?

Funciona como um encanto para mim da seguinte forma:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)
    
por 17.09.2012 / 07:00
4

@sulman usando:

     zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

ainda incluirá a pasta dir1 / ignoreDir1 / empty no arquivo zip, usando:

     zip -r myarchive.zip dir1 -x dir1/ignoreDir1** dir1/ignoreDir2**

vai fazer o truque, você também pode usar um líder ** para pesquisar em subpastas em vez de apenas dir1

    
por 30.10.2013 / 12:31
1

Assim como outras respostas, excluindo os diretórios totalmente, em vez de excluir todo o conteúdo dos diretórios:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
    
por 22.01.2016 / 15:39
0

Achei que isso funcione em David R Heffelfinger :

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

Excluiu o diretório e seu conteúdo.

    
por 03.10.2014 / 20:28
-1

Para mim, funcionou: zip -9 -r ~ / fold.zip online -x pasta / pasta2 / pasta3 / foldern / \ * .

Parece que o asterisco deve ser escapado.

    
por 01.12.2015 / 14:29