¿Cómo excluir directorios y archivos que comprimen un directorio?

32

Yo, necesito comprimir un directorio excluyendo algún subdirectorio y archivo; Usé esto:

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

sin ningún éxito; node_moduleses una carpeta en la principal mientras bower_componentsestá dentro de la aplicación de carpeta

arpho
fuente
¿Cuál es su resultado y cuál es su resultado esperado?
DEN
¿Desea excluir todos los subdirectorios o solo algunos de ellos?
Sergiy Kolodyazhnyy

Respuestas:

36

Simplemente adivino lo que quieres.

-x ".*"

excluir todos los archivos que comienzan con un punto

hazlo como:

-x .\*

excluir todos los archivos (con un punto en el nombre del archivo)

hazlo como:

-x \*.\*

-

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

excluir este directorio y todos los archivos en él

hazlo como:

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

-

-x "*.zip"

excluir todos los archivos zip

hazlo como:

-x \*.zip

Excluye node_modules dos veces

GUARIDA
fuente
2
gracias Lo obtuve, usando varias publicaciones que llegaron a eso: zip -r * app / * -x \ app / bower_components / * -x \ node_modules / * -x * .zip
arpho
@arpho Tu comentario anterior debería ser una respuesta, ya que parece estar funcionando para mí ...
chesedo
7

Algo como esto debería hacer el truco:

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/**.*

Lo siguiente -xes una lista de directorios y tipos de archivo (extensión) para excluir.

MikeiLL
fuente
Ahora que sé, **\*es por exclusión recursiva. Muchas gracias.
Duc Tran
6

Suponiendo que su directorio es un repositorio de git (y a juzgar por la pregunta, es muy probable que lo sea), puede agregar directorios que desea excluir al .gitignorearchivo y usar el git archivecomando para comprimir el contenido de su directorio:

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

En su ejemplo, el .gitignorearchivo debería verse así:

node_modules
app/bower_components
Jakub Kukul
fuente
3

Esto funciona perfecto para mí en 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
fuente
0

en cada proyecto omita node_modules de esta manera:

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