comment exclure des répertoires et zipper un fichier dans un répertoire?


32

J'ai besoin de compresser un répertoire en excluant certains sous-répertoires et fichiers; J'ai utilisé ceci:

zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"

sans succès; node_modulesest un dossier dans le principal alors qu'il bower_componentsest dans l'application de dossier


quel est votre résultat et quel est votre résultat attendu?
DEN

Vous souhaitez exclure tous les sous-répertoires ou seulement certains d'entre eux?
Sergiy Kolodyazhnyy

Réponses:


36

Je devine simplement ce que vous voulez.

-x ".*"

exclure tous les fichiers commençant par un point

fais comme:

-x .\*

exclure tous les fichiers (avec un point dans le nom du fichier)

fais comme:

-x \*.\*

-

-x "app/bower_components" -x "node_modules"

exclure ce répertoire et tous les fichiers qu'il contient

fais comme:

-x app/bower_components/\* -x node_modules/\*

-

-x "*.zip"

exclure tous les fichiers zip

fais comme:

-x \*.zip

Vous excluez node_modules deux fois


2
merci je l'ai eu, en utilisant divers messages arrivés à cela: zip -r * app / * -x \ app / bower_components / * -x \ node_modules / * -x * .zip
arpho

@arpho Votre commentaire ci-dessus devrait être une réponse car il semble fonctionner pour moi ...
chesedo

7

Quelque chose comme ça devrait faire l'affaire:

zip -r zipped.zip dir1/ -x */\.* *.git* \.* *.zip *.csv *.json *.rb *.bak *.swp *.back *.merge *.txt *.sh dir1/node_modules/**\* dir1/bower_components/**\* dir1/dist/**.*

Où suit -xest une liste de répertoires et de types de fichiers (extension) à exclure.


Maintenant que je sais que **\*c'est pour l'exclusion récursive. Merci beaucoup.
Duc Tran

6

En supposant que votre répertoire est un référentiel git (et à en juger par la question, il est très probable), vous pouvez ajouter des répertoires que vous souhaitez exclure au .gitignorefichier et utiliser la git archivecommande pour compresser le contenu de votre répertoire:

git archive --format=zip HEAD -o zipfile.zip

Dans votre exemple, le .gitignorefichier devrait ressembler à ceci:

node_modules
app/bower_components

3

Cela fonctionne parfaitement pour moi sur Ubuntu 16.04:

sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"

0

dans chaque projet, ignorez node_modules comme ceci:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.