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 deberían 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.
Respuesta1
En primer lugar, si no tiene instalado zip, instálelo primero de la siguiente manera:
sudo apt-get install zip
Luego, simplemente creando 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 -@
Excluir archivos de un archivo Zip (tomado dehttp://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 la
-x
bandera, 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 podría 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 resulta útil.
Excluir archivos .DS_Store de archivos Zip
Esto evitará que los
.DS_Store
archivos de metadatos de Mac, normalmente invisibles, 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ás usar otra variación de ese comando para excluir también los archivos ds_store de los subdirectorios:
zip -r archive.zip directory -x "*/\.DS_Store"
Nota: no todos los shells requieren comillas para que este comando funcione correctamente, pero en el shell bash (el predeterminado para OS X) necesitarás usar comillas para excluir con comodines y patrones.
Excluir tipos de archivos específicos de un archivo Zip
Con comodines, también puedes excluir todos los archivos de un determinado tipo centrándote en la extensión. Por ejemplo, este comando comprimirá un directorio completo, menos los
.jpg
archivos:zip -r archive.zip directory -x "*.jpg"
Esto podría modificarse para cualquier extensión de archivo o patrón específico que coincida con un nombre de archivo.
Excluir el directorio .git o .svn de un archivo Zip
Comprima un directorio, menos
.git
y su contenido:zip -r zipdir.zip directorytozip -x "*.git*"
Comprima 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 utilizar patrones y comodines, también puede excluir cualquiera o todos los archivos y carpetas invisibles que tengan como prefijo 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 "*/\.*"
Respuesta2
Esto también excluye archivos ocultos en directorios no ocultos:
find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
Respuesta3
Agregue ( "
de .*
lo contrario, su shell se expandirá .*
a los archivos de puntos en el directorio actual) y también excluya los archivos ocultos en los subdirectorios:
zip -r zipfile.zip . -x ".*" -x "*/.*"
Esto hará que los archivos que comiencen con a .
no se agreguen a su archivo 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%)
Respuesta4
Éste incluye todos los "." directorios, subdirectorios y "." archivos o directorios dentro de directorios... Esencialmente la primera respuesta, pero incluye el nivel superior "." archivos.
find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@