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

arpho
la source
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

TANIÈRE
la source
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.

MikeiLL
la source
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
Jakub Kukul
la source
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*"
Tarik
la source
0

dans chaque projet, ignorez node_modules comme ceci:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done
nils petersohn
la source