Respuestas:
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 :
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
¿Qué tal este comando?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Esperaba que hubiera una manera de especificar la ruta almacenada con mayor precisión.
Espero que esto ayude.
(cd directory && zip -r ../out.zip .)
Mantiene el shell principal en el mismo directorio y solo cambia el directorio del sub-shell que muere después del comando.