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

188

J'ai un projet avec beaucoup de dossiers / fichiers cachés. Je veux créer une archive zip de celui-ci, mais dans l'archive ne devrait pas être des dossiers / fichiers cachés. Si les fichiers d'un dossier caché 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 .*

Cela n'a pas fonctionné. Tous les répertoires cachés étaient toujours dans le fichier zip.

    
posée Martin Thoma 27.08.2011 - 20:01
la source

8 réponses

98

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 -@
    
réponse donnée arrange 27.08.2011 - 21:27
la source
66

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 les fichiers cachés:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@
    
réponse donnée M A K Ripon 11.08.2015 - 08:28
la source
52

Ajoutez " au .* (sinon, votre shell développe .* dans les fichiers de points du répertoire courant) et exclut également les fichiers cachés dans les sous-répertoires:

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

Les fichiers commençant par . 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%)
    
réponse donnée Rinzwind 27.08.2011 - 21:17
la source
8

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
réponse donnée cosimnot 01.11.2012 - 04:19
la source
8

Exemple d’exclusion de tous les dossiers commençant par. :

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

Mieux compresser mais plus lentement:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
réponse donnée Tigrouzen 21.05.2014 - 18:51
la source
5

La méthode correcte serait:

zip -r zipfile.zip directory -x directory/.*
    
réponse donnée Rômulo Neves 08.05.2014 - 18:49
la source
4

En compressant les répertoires à l'exclusion de certaines extensions de fichiers:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
réponse donnée K-Gun 08.12.2014 - 18:49
la source
3

Sans les dossiers cachés et les fichiers 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%)
    
réponse donnée Umanshield 15.02.2017 - 09:45
la source

Lire d'autres questions sur les étiquettes