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

Répertoire zip sous Unix, mais à l'exclusion de sous-répertoires spécifiques (et de tout ce qu'ils contiennent)

J'essaie de zipper un répertoire (sur Unix via SSH) mais je dois exclure quelques sous-répertoires (et tous les fichiers et répertoires qu'ils contiennent).

Jusqu'à présent, j'ai ceci :

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

Cela ne semble pas fonctionner.

J'ai aussi essayé

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

Cependant, cela inclura toujours les sous-répertoires dans ignoreDir1 et ignoreDir2.

La structure des sous-répertoires dans les répertoires que je veux exclure est assez substantielle, donc je ne peux pas simplement ajouter chaque répertoire à l'argument -x.

Est-ce que quelqu'un sait comment faire ?

Réponses (7)

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

J'étais si près du but !

La commande réelle dont j'ai besoin est :

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

Pour mon système particulier, afin d'exclure un répertoire, j'ai dû mettre des guillemets autour de mes répertoires exclus et cela a fonctionné à merveille :

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

Notes :

– cela excluait à la fois le répertoire à exclure et tous les fichiers à l'intérieur de celui-ci.

– Vous devez utiliser le chemin complet des répertoires que vous voulez exclure !

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

@sulman using :

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

inclura toujours dir1/ignoreDir1/ dossier vide dans l'archive zip, en utilisant :

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

fera l'affaire, vous pouvez également utiliser un lead ** pour rechercher dans des sous-dossiers au lieu de seulement dir1

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

Ce qui suit fera

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

Pour quoi avez-vous besoin du **, @sulman ?

Ça marche comme un charme pour moi comme suit :

[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

Tout comme les autres réponses, mais en excluant entièrement les annuaires, au lieu d'exclure tout le contenu des annuaires :

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

J'ai trouvé ce travail à partir de David R Heffelfinger :

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

Il excluait le répertoire et son contenu.

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

Pour moi, ça a marché: zip -9 -r ~/folded.zip online -x folder/folder2/folder3/foldern/ *.

Il semble que l'astérisque doive être échappé.