Comment puis-je créer une archive zip d'un répertoire entier via terminal sans fichiers cachés?

J'ai un projet avec beaucoup de dossiers / fichiers cachés. Je veux en créer une archive zip, mais dans l'archive ne devrait pas y avoir de dossiers / fichiers cachés. 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.

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

sudo apt-get install zip

Ensuite, pour simplement créer un fichier zip:

zip -r compressed_filename.zip foldername

Si vous souhaitez exclure les fichiers cachés:

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

Exclure des fichiers d'une archive Zip(tiré de http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

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

zip archive.zip files -x "ExcludeMe"

Cela signifie que vous pouvez exclure un seul fichier, disons qu'il s'appelle " Nothanks.jpg”

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

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

Exclure .Fichiers DS_Store à partir d'Archives Zip

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

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

Cependant, 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 (par défaut pour OS X), vous devrez utiliser les guillemets pour exclure avec des caractères génériques et des motifs.

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 compressera un répertoire entier, moins tout .jpg fichier:

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

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

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

Zip un répertoire, moins .git et c'est le contenu:

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

Zip un dossier, sans inclure le .svn répertoire:

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

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

Étant donné que les modèles et les caractères génériques peuvent être utilisés, vous pouvez également exclure tout ou partie des fichiers et dossiers invisibles qui sont rendus ainsi en étant préfixés par un point, qu'il s'agisse d'un répertoire comme .svn ou un fichier individuel comme .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 "*/\.*"

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

Ajouter " à la .* (sinon, votre shell se dilate .* pointillés dans le répertoire courant), et excluez également les fichiers cachés dans les sous-répertoires:

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

Cela se traduira par des fichiers commençant par a . ne pas être ajouté dans votre fichier zip.

rinzwind@discworld:~/tmp$ ls -ladrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmpdrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmprinzwind@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%)

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

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

Meilleure compression mais plus lente :

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

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

La bonne méthode serait:

zip -r zipfile.zip directory -x directory/.*

Lors de la fermeture éclair des répertoires 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%)