Comprimir manteniendo directorios relativos desde cualquier lugar

Comprimir manteniendo directorios relativos desde cualquier lugar

Intentando obtener una funcionalidad específica de zip. Me gustaría comprimir todo de forma recursiva en un directorio específico y preservar la estructura del directorio dentro de SÓLO ese directorio, pero no hacer que la ruta completa forme parte del archivo.

Digamos que tengo /path/to/test/tmp/y quiero que todo tmp/esté comprimido como si estuviera ejecutando el comando desde esa carpeta.

La -rbandera obtiene lo que quiero pero incluye información de ruta encima del directorio que necesito, dependiendo de dónde lo ejecuto:

user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
  adding: tmp/foo.txt (deflated 68%)
  adding: tmp/bar/bar.txt (deflated 41%)
  adding: tmp/baz/baz/baz.txt (deflated 92%)

La -jbandera corta todo menos los nombres de los archivos:

user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
  adding: foo.txt (deflated 68%)
  adding: bar.txt (deflated 41%)
  adding: baz.txt (deflated 92%)

Lo que necesito es algo que me dé esto:

adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)

Pero puedo especificar que se ejecute desde cualquier lugar. Estoy intentando escribir esto en un cron. No encuentro lo que busco en elpágina de manual. ¿Cómo puedo lograr esto, además de cambiar los directorios en mi script?

Respuesta1

Parece que zip(al menos la versión de Info-ZIP que está en mi plataforma) no te permite hacer eso. (A diferencia de tar, que tiene la opción -C/ --directory, como insinuó @Xen2050).

Pero tengo que preguntar, ¿es tan malo cambiar directorios en tu script? Especialmente si puede hacerlo en un subshell y no afectar el directorio de trabajo actual del script (explicado en detalleen esta respuesta SO):

pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd    # prints the same as in line 1

Tenga en cuenta que esto almacenará el archivo Zip final en formato /path/to/test/tmp.

información relacionada