Comprime un archivo sin incluir el directorio padre

12

Tengo una carpeta que contiene varios archivos.

carpeta

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

Mi objetivo es comprimir el archivo desde fuera de esta carpeta (sin usar el cdcomando) sin incluir el directorio de la carpeta.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Este comando incluye el directorio de la carpeta en el zip final. ¿Alguna pista?

Pregunta relacionada: comprima el contenido de una carpeta sin incluir la carpeta en sí

Lorenzo B
fuente
1
Desde las páginas de manual, parece que solo -jse aplicaría, y eso comprimiría todas las carpetas en un solo directorio de nivel raíz dentro del ZIP. Eso no es lo que estás buscando, ¿verdad?
phyrfox
@phyrfox Quizás sí. Necesito verificarlo. Gracias.
Lorenzo B

Respuestas:

13

Si desea almacenar todos los archivos folderbajo su nombre sin una indicación de directorio, puede usar la -jopción.

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

o

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Si tiene archivos en subdirectorios, tampoco tendrán ningún componente de directorio en el archivo, por ejemplo folder/subdir/foo, se almacenarán en el archivo como foo.

Pero probablemente sería más fácil cambiar al directorio. Es casi exactamente la misma cantidad de tipeo que el método de corsé anterior. Si lo hace, si incluye archivos en subdirectorios, tendrán su ruta relativa desde el directorio que cambió, por ejemplo folder/subdir/foo, se almacenarán como subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Para uso interactivo, pierde la terminación del shell de esta manera, porque el shell no se da cuenta de que estará en un directorio diferente cuando ejecute el zipcomando. Para remediar eso, emita el cdcomando por separado. Para volver fácilmente al directorio anterior, puede usar pushdy popd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

Si desea un control total sobre las rutas almacenadas en un archivo zip, puede crear un bosque de enlaces simbólicos. A menos que se indique lo contrario, zipno almacena enlaces simbólicos.

Gilles 'SO- deja de ser malvado'
fuente
No tiene que enumerar explícitamente todos los archivos en el subdirectorio ( folder), solo puede usar un comodín, es decirzip -j folder/*
Jakub Kukul
Confiar en la expansión de shell significa que los archivos de puntos (por ejemplo .profile) no se incluirán en el archivo. En cambio, cambie el directorio de trabajo actual y especifique .como el archivo a archivar:cd folder && zip -r ../folder.zip .
sheldonh