web-dev-qa-db-fra.com

Comment créer une archive Zip de tout un répertoire via un terminal sans fichiers cachés?

J'ai un projet avec beaucoup de dossiers/fichiers cachés. Je veux créer une archive Zip, mais l'archive ne doit contenir aucun dossier/fichier caché. Si les fichiers d'un dossier masqué ne sont pas masqués, ils ne doivent pas non plus être inclus.

Je sais que je peux créer une archive Zip d'un répertoire comme celui-ci:

Zip -r zipfile.Zip directory

Je sais aussi que je peux exclure des fichiers avec l'option -x, alors j'ai pensé que cela pourrait fonctionner:

Zip -r zipfile.Zip directory -x .*

Ça n'a pas marché. Tous les répertoires cachés étaient encore dans le fichier Zip.

211
Martin Thoma

Cela exclut également les fichiers cachés dans des répertoires non cachés:

find /full_path -path '*/.*' -Prune -o -type f -print | Zip ~/file.Zip -@
105
arrange

Tout d'abord, si vous n'avez pas installé Zip, installez-le d'abord comme suit:

Sudo apt-get install Zip

Ensuite, pour créer simplement un fichier Zip:

Zip -r compressed_filename.Zip foldername

Si vous souhaitez exclure des fichiers cachés:

find /folder_path -path '*/.*' -Prune -o -type f -print | Zip ~/compressed_filename.Zip -@

fichiers exclus d'une archive Zip

Les bases de l'exclusion de fichier lors de la création d'une archive Zip sont centrées sur l'indicateur -x, utilisé pour exclure les fichiers de l'archive qui correspondent à un nom ou à un modèle spécifique. Au plus basique, cela ressemblera à ceci:

Zip archive.Zip files -x "ExcludeMe"

Cela signifie que vous pouvez exclure un seul fichier, en l’appelant "Nothanks.jpg".

Zip archive.Zip images/ -x "Nothanks.jpg"

Voyons quelques exemples spécifiques où cela est utile.

Exclure les fichiers .DS_Store des archives Zip

Cela empêchera les fichiers .DS_Store de métadonnées Mac, généralement invisibles, d'être inclus dans une archive Zip, qui sont regroupés par défaut:

Zip -r archivename.Zip archivedirectory -x "*.DS_Store"

Toutefois, si le répertoire comprend des sous-répertoires, vous souhaiterez utiliser une autre variante de cette commande pour exclure également les fichiers ds_store des sous-répertoires:

Zip -r archive.Zip directory -x "*/\.DS_Store"

Remarque: tous les shells n'ont pas besoin des guillemets pour que cette commande fonctionne correctement, mais dans le shell bash (valeur par défaut pour OS X), vous devrez utiliser les guillemets pour les exclure avec des caractères génériques et des modèles.

Exclure des types de fichiers spécifiques d'une archive Zip

Avec les caractères génériques, vous pouvez également exclure tous les fichiers d'un certain type en vous concentrant sur l'extension. Par exemple, cette commande compresse un répertoire entier, moins les fichiers .jpg:

Zip -r archive.Zip directory -x "*.jpg"

Cela pourrait être modifié pour toute extension de fichier ou motif spécifique correspondant à un nom de fichier.

Exclure le répertoire .git ou .svn d'une archive Zip

Compressez un répertoire, moins .git et son contenu:

Zip -r zipdir.Zip directorytozip -x "*.git*"

Compressez un dossier sans inclure le répertoire .svn:

Zip -r zipped.Zip directory -x "*.svn*"

Exclure tous les fichiers cachés d'une archive Zip

Étant donné que des modèles et des caractères génériques peuvent être utilisés, vous pouvez également exclure tout ou partie des fichiers et dossiers invisibles créés en préfixant un point, qu’il s’agisse d’un répertoire tel que .svn ou d’un fichier individuel tel que .bash_profile ou .htaccess.

Zip -r archivename.Zip directorytozip -x "*.*"

Ou pour exclure tous les fichiers invisibles de tous les sous-répertoires:

Zip -r archive.Zip directory -x "*/\.*"
97
M.A.K. Ripon

Ajoutez " au .* (sinon, votre Shell étend .* aux fichiers point du répertoire en cours) et exclut également les fichiers cachés des sous-répertoires:

Zip -r zipfile.Zip . -x ".*" -x "*/.*"

Cela aura pour conséquence que les fichiers commençant par un . ne seront pas ajoutés à votre fichier Zip.

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ Zip -r zipfile.Zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ Zip -r zipfile.Zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
53
Rinzwind

Celui-ci comprend tous les "." répertoires, sous-répertoires et "." fichiers ou répertoires dans des répertoires ... Essentiellement, la première réponse, mais inclut le niveau supérieur "." des dossiers.

find /full_path -path '*.*/.*' -Prune -o -type f -print | Zip ~/file.Zip -@
8
cosimnot

Exemple pour exclure tous les dossiers commençant par. :

tar cvpzf folder.tgz folder/ --exclude '.*'

Mieux compresse mais plus lent:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
8
Tigrouzen

La bonne méthode serait:

Zip -r zipfile.Zip directory -x directory/.*
5
Rômulo Neves

En zippant les répertoires en excluant une extension de fichier:

$ cd /path/to/dir
$ Zip -r dir.Zip . -x "*.log" -x "*.cache"
4
K-Gun

Sans dossiers et fichiers cachés dans le répertoire:

Zip -r zipfile.Zip directory/*

répertoire: |── .git │   ├── src │   └── Work.file ├── .test │   └── .file └── test.file

$ Zip -r zipfile.Zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)
3
Umanshield