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.
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 -@
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 "*/\.*"
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%)
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 -@
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 '.*'
La bonne méthode serait:
Zip -r zipfile.Zip directory -x directory/.*
En zippant les répertoires en excluant une extension de fichier:
$ cd /path/to/dir
$ Zip -r dir.Zip . -x "*.log" -x "*.cache"
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%)