2011-07-19 10:19:13 +0000 2011-07-19 10:19:13 +0000
121
121

Directório zip Unix mas excluindo subdirectórios específicos (e tudo dentro deles)

Estou a tentar fechar um directório (no Unix via SSH) mas preciso de excluir alguns subdirectórios (e todos os ficheiros e directórios dentro deles).

Até agora, tenho isto:

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

Isso parece não funcionar.

Também tentei

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

Contudo, isso ainda incluirá subdirectórios dentro de ignoreDir1 e ignoreDir2.

A estrutura de subdirectórios nos directórios que quero excluir é bastante substancial, pelo que não posso simplesmente adicionar cada directório ao argumento -x.

Alguém sabe como fazer isto?

Respostas (7)

134
134
134
2011-07-19 10:32:23 +0000

Eu estava tão perto!

O comando real que eu preciso é:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/ **\* dir1/ignoreDir2/** \*
73
73
73
2012-10-31 11:43:43 +0000

Para o meu sistema em particular, a fim de excluir um directório, tive de colocar citações em torno dos meus directórios excluídos e funcionou como um encanto:

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

Notas:

– isto excluiu tanto o directório a excluir como todos os ficheiros dentro dele.

– deve utilizar o caminho completo para os directórios que pretende excluir!

9
9
9
2013-10-30 11:31:16 +0000

@sulman utilizando:

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

ainda incluirá dir1/ignoreDir1/ pasta vazia no arquivo zip, utilizando

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

fará o truque, também pode usar uma pasta principal ** para pesquisar em subpastas em vez de apenas dir1

7
7
7
2012-09-17 05:00:36 +0000

O seguinte fará

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

Para que precisava do ** para, @sulman?

Funciona como um encanto para mim, como se segue:

[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%)
1
1
1
2016-01-22 14:39:17 +0000

Tal como outras respostas, mas excluindo inteiramente os directórios, em vez de excluir todos os conteúdos dos directórios:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
0
0
0
2014-10-03 18:28:57 +0000

Encontrei isto para trabalhar de David R Heffelfinger :

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

Excluiu o directório e o seu conteúdo.

-1
-1
-1
2015-12-01 13:29:01 +0000

Para mim funcionou: zip -9 -r ~/folded.zip online -x folder/folder2/folder3/foldern/ ***.

Parece ser que o asterisco deve ser evitado.