web-dev-qa-db-fra.com

Répertoire Zip Unix, mais sous-répertoires spécifiques exclus

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

Jusqu'ici j'ai ceci:

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

Cela ne semble pas fonctionner cependant.

J'ai aussi essayé

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

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

La structure des sous-répertoires dans les répertoires que je souhaite exclure est très importante, aussi je ne peux pas simplement ajouter chaque répertoire à l'argument -x.

Est-ce que quelqu'un sait comment faire ça?

100
sulman

J'étais si près!

La commande dont j'ai besoin est:

Zip -r myarchive.Zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
117
sulman

Pour mon système particulier, afin d'exclure un répertoire, je devais mettre des guillemets autour de mes répertoires exclus et cela fonctionnait à merveille:

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

Remarques:

- cela exclut à la fois le répertoire à exclure et tous les fichiers qu'il contient.

- Vous devez utiliser le chemin d'accès complet aux répertoires que vous souhaitez exclure!

62
pathfinder

Ce qui suit fera

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

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

Cela fonctionne 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%)
6
ericn

@sulman utilisant:

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

continuera d'inclure le dossier dir1/ignoreDir1/empty dans l'archive Zip, en utilisant:

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

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

6
Gianluca P.

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

Zip -r myarchive.Zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
1
Richard Gomes

J'ai trouvé que cela fonctionne de David R Heffelfinger :

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

Cela excluait le répertoire et son contenu.

0
Rick Ehrahrt