Compressez récursivement des fichiers dans un répertoire et des sous-répertoires à l'aide de l'outil de ligne de commande «zip» sous Mac OS X et excluez les fichiers .DS_Store de TOUS les sous-dossiers

10

J'essaie de créer un fichier ZIP à l'aide de l' zipoutil de ligne de commande fourni avec le terminal Mac OS X. Je veux compresser récursivement le contenu du dossier actuel mais en excluant les .DS_Storefichiers. J'essaie avec ça:

zip -r myarchive.zip . -x .DS_Store

Le -x .DS_Storeexclut le .DS_Storefichier dans le dossier actuel, mais pas dans les sous-dossiers ajoutés récursivement. Comment puis-je également exclure tous les .DS_Storefichiers de TOUS les sous-dossiers?

OMA
la source

Réponses:

17

Ajouter un caractère générique à l'option d'exclusion

zip -r myarchive.zip . -x "*.DS_Store"
fd0
la source
Merci pour votre réponse. Cela fonctionne, mais pourquoi? :). Pourriez-vous s'il vous plaît expliquer?
OMA
Le se *développe à rien ou à n'importe quelle partie d'un chemin, car zip compresse récursivement les fichiers et leurs répertoires. Ainsi, ./.DS_Storealors ./*/.DS_Storeet ainsi de suite sont exclus de l'archive.
fd0
Ah, intéressant. Ainsi, le caractère générique fonctionne différemment que dans le monde Windows, où "* .DS_Store" signifierait simplement "tout fichier se terminant par .DS_Store"
OMA
1

La plupart du temps, je souhaite exclure tous les fichiers cachés, tels que .DS_Storeou .gitou.gitignore

Avec une seule commande, vous pouvez prendre soin de tout cela et compresser tous les fichiers et sous-dossiers de manière récursive

zip -r archive.zip folder -x "*/\.*"

Ou encore mieux, créez une fonction dans zsh pour vous faciliter la vie

open ~/.zshrc

Ajoutez le code suivant dans votre section d'alias

function zip-visible(){
    zip -r $1 $2 -X -x "*/\.*"
}

Recharger la configuration zsh

source ~/.zshrc

Utilisez comme ça

zip-visible archive.zip folder

alev
la source