¿Cómo puedo crear un archivo zip de un directorio completo a través de terminal sin archivos ocultos?

Tengo un proyecto con muchas carpetas / archivos ocultos. Quiero crear un archivo zip, pero en el archivo no debería haber carpetas / archivos ocultos. Si los archivos de una carpeta oculta no están ocultos, tampoco deben incluirse.

Sé que puedo crear un archivo zip de un directorio como este:

zip -r zipfile.zip directory

También sé que puedo excluir archivos con la opción-x, así que pensé que esto podría funcionar:

zip -r zipfile.zip directory -x .*

No funcionó. Todos los directorios ocultos todavía estaban en el archivo zip.

En primer lugar, si no tiene instalado zip, instálelo primero de la siguiente manera:

sudo apt-get install zip

Luego, para simplemente crear un archivo zip:

zip -r compressed_filename.zip foldername

Si desea excluir archivos ocultos:

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

Exclusión de archivos de un archivo Zip(tomado de http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Los conceptos básicos de la exclusión de archivos al crear un archivo zip se centran en -x indicador, que se utiliza para excluir archivos del archivo que coinciden con un nombre o patrón específico. En su forma más básica, se verá así:

zip archive.zip files -x "ExcludeMe"

Lo que significa que puede excluir un solo archivo, digamos que se llama " Nothanks.jpg"

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

Veamos algunos ejemplos específicos en los que esto es útil.

Excluir .DS_Store Archivos de Archivos Zip

Esto evitará los metadatos de Mac típicamente invisibles .DS_Store evitar que los archivos se incluyan en un archivo zip, que se incluyen de forma predeterminada:

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

Sin embargo, si el directorio incluye subdirectorios, querrá usar otra variación de ese comando para excluir los archivos ds_store de los subdirectorios también:

zip -r archive.zip directory -x "*/\.DS_Store"

Nota: no todos los shells requieren las comillas para que este comando funcione correctamente, pero en el shell bash (el predeterminado para OS X) necesitará usar las comillas para excluir con comodines y patrones.

Excluir Tipos de Archivos Específicos de un Archivo Zip

Con los comodines, también puede excluir todos los archivos de un tipo determinado centrándose en la extensión. Por ejemplo, este comando comprimirá un directorio completo, menos .jpg file:

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

Eso podría modificarse para cualquier extensión de archivo o patrón específico que coincida con un nombre de archivo.

Excluir el .git or .Directorio svn de un archivo Zip

Comprimir un directorio, menos .git y es contenido:

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

Comprimir una carpeta, sin incluir el .svn directorio:

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

Excluir Todos los Archivos Ocultos de un Archivo Zip

Dado que se pueden usar patrones y comodines, también puede excluir cualquiera o todos los archivos y carpetas invisibles que se crean con el prefijo de un punto, ya sea un directorio como .svn o un archivo individual como .bash_profile o .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

O para excluir todos los archivos invisibles de todos los subdirectorios:

zip -r archive.zip directory -x "*/\.*"

Esto también excluye los archivos ocultos en directorios no ocultos:

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

Añadir " a la .* (de lo contrario, su caparazón se expande .* a los archivos de puntos en el directorio actual), y también excluir archivos ocultos en subdirectorios:

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

Esto dará como resultado que los archivos comiencen con a . no debe agregarse a su archivo 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%)

Ejemplo para excluir todas las carpetas que comienzan con . :

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

Mejor compresión pero más lenta :

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

Este lo incluye todo "."directorios, subdirectorios y"."archivos o directorios dentro de directorios...Esencialmente la primera respuesta, pero incluye el nivel superior "." file.

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

El método correcto sería:

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

Al comprimir directorios excluyendo alguna extensión de archivo:

$ cd /path/to/dir$ zip -r dir.zip . -x "*.log" -x "*.cache"

Sin carpetas y archivos ocultos en el directorio:

zip -r zipfile.zip directory/*

directorio:

|── .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%)