¿Cómo puedo comprimir una carpeta usando la línea de comandos mientras mantengo su estructura de archivos?

1

Por ejemplo, si quiero comprimir /Users/admin/Downloads/Backup , y estoy en /Users/admin/ , podría:

zip -r downloads.zip /Users/admin/Downloads/Backup

y si descomprimo downloads.zip obtendría una carpeta de Usuarios y tendría un Usuarios = > admin = > Descargas = > Estructura de respaldo.

Este es un comportamiento particularmente indeseable si quiero crear un archivo zip de instalación para TWRP.

Por lo tanto, tendré que:

cd /Users/admin/Downloads/Backup; zip -r /Users/admin/downloads.zip .; cd /Users/admin/

Esto no parece lo que haría un profesional.

¿Qué puedo hacer para comprimir una carpeta mientras mantengo su estructura de archivos?

    
pregunta aeroxy 10.11.2018 - 14:54

2 respuestas

0

Un "pro" leería primero el manual. Ahora, el manual zip está lleno de datos cruzados, pero dentro de la lectura encontrará: "zip almacenará la ruta completa (relativa al directorio actual)". Más adelante en la lectura, encontrará una opción para eliminar todas las rutas en su archivo zip, pero no es una buena idea, ya que puede crear un archivo "bomba" que contamine el directorio en el que se extrae. Es mejor contener su archivo dentro de su propio directorio.

cd /Users/admin/Downloads
zip -r downloads Backup
mv -- downloads.zip some/other/location
cd -
  • Primero cambiamos el directorio a / Users / admin / Downloads
  • Nombramos el archivo (descargas) y .zip se agregará al nombre del archivo
  • Respondemos a través del directorio de copia de seguridad agregando todos los archivos, incluido el directorio principal, al archivo
  • mover el archivo zip a otra ubicación
  • Finalmente, llamamos a la variable de entorno OLDPWD para volver al directorio original- cd -
respondido por el fd0 10.11.2018 - 20:30
-1

No estoy seguro de si esto es realmente lo que quieres, ya que puedes usar la línea de comandos o un script pero hay opciones.

Primero, no proporcione la ruta completa para el archivo

 cd folder; zip -r ../zipped_dir.zip *

O para un script, puede usar cd o pushd y popd para moverse al directorio que será la raíz del archivo antes de emitir el comando zip. La forma exacta en que lo haga dependerá de cómo el script sepa qué hacer con el zip. Pero, si, por ejemplo, desea que la carpeta admin / Downloads / Backup / zip esté comprimida con rutas internas de solo ./folder, deberá hacer esto:

pushd /Users/admin/Downloads/Backup
zip -r /path/to/out.zip ./folder/
popd

Eso resultará en que tu out.zip contenga las rutas relativas que deseas.

    
respondido por el LangLangC 10.11.2018 - 17:52

Lea otras preguntas en las etiquetas