Entonces, si entiendo correctamente, está tratando de archivar los archivos y carpetas en una carpeta en particular pero sin incluir la carpeta raíz.
Ejemplo:
/test/test.txt
/test/test2.txt
donde test.txt y test2.txt se almacenarían en el archivo zip, pero no / test /
Puede cd en el directorio / test / luego ejecutar algo como,
zip -r filename.zip ./*
Lo que crearía un archivo en la misma carpeta llamada filename.zip. O si lo ejecuta desde fuera de la carpeta que podría ejecutar,
zip -r test.zip test/*
El / * es la parte que incluye solo el contenido de la carpeta, en lugar de toda la carpeta.
Editar: OP quería múltiples cremalleras, la solución terminó siendo un poco pirata, tengo curiosidad por saber si hay una mejor manera de hacerlo.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
no funciona. ¿Hay alguna forma correcta de lograr esto desde fuera del directorio?Use la opción
-j
o--junk-paths
en su comando zip.Desde la página de manual de zip :
fuente
¿Qué tal este comando?
fuente
cd
. Esperaba que hubiera una manera de especificar la ruta almacenada con mayor precisión.Espero que esto ayude.
Mantiene el shell principal en el mismo directorio y solo cambia el directorio del sub-shell que muere después del comando.
fuente