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 cd
comando) 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í
-j
se 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?Respuestas:
Si desea almacenar todos los archivos
folder
bajo su nombre sin una indicación de directorio, puede usar la-j
opción.o
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 comofoo
.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 comosubdir/foo
.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
zip
comando. Para remediar eso, emita elcd
comando por separado. Para volver fácilmente al directorio anterior, puede usarpushd
ypopd
.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,
zip
no almacena enlaces simbólicos.fuente
folder
), solo puede usar un comodín, es decirzip -j folder/*
.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 .