Linux: especificando el directorio de nivel superior al crear el archivo zip

12

Tengo un proyecto con la estructura de directorio habitual (src /, bin /, ...), es decir

project-name/
|-- bin
|-- lib
|-- src
`-- Makefile

Y me gustaría crear un archivo con la siguiente estructura de directorios:

project-name-version/
|-- bin
|-- lib
|-- src
`-- Makefile

¿Hay una forma clara de hacer esto, que evite crear un directorio temporal? project-name/ En otro lugar, luego copiando los archivos dentro de una llamada finalmente zip -r ... en ese directorio temporal?

(Básicamente estoy buscando algún tipo de prefijo de ruta o opción de ruta relativa).

leden
fuente

Respuestas:

7

Tal vez esto ya se te haya ocurrido, pero ¿por qué no usar un enlace simbólico en lugar de copiar todo?

ln -s project-name project-name-version

entonces usa zip -r a través del enlace sym ( zip desreferenciar enlaces sym por defecto)? Cuando termines puedes simplemente rm El enlace sym. Quizás no sea la solución más elegante, pero no conozco una forma obvia de hacerlo. zip directamente.

FatalError
fuente
1
Esto también funciona con tar si usas el -h bandera.
Kyle Strand
(También estoy usando el z bandera; No estoy seguro de si eso lo afecta.
Kyle Strand
11

Esto es más un consejo que una respuesta: usar Git !

Si configura un Git repositorio para su proyecto, todo se vuelve bastante sencillo:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip
cYrus
fuente
1
Excelente consejo, gracias. Documentación del archivo git: git-scm.com/docs/git-archive
Meglio
Si bien el uso del control de versiones es una buena idea, esta respuesta no coincide con la pregunta del caso genérico.
raimue
@Raim "Este es más un consejo que una respuesta: ¡usa Git!" Escrito allí desde hace 4 años, gracias por señalarlo ...
cYrus
1
Si esto no fue pensado como una respuesta, debe convertirse en un comentario.
raimue