Linux: Spécification du répertoire de niveau supérieur lors de la création d'une archive zip


17

J'ai un projet avec la structure de répertoire habituelle (src /, bin /, ...), ie

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

Et je voudrais créer une archive avec la structure de répertoires suivante:

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

Y a-t-il une manière ordonnée de faire ceci, qui évite de créer un répertoire temporaire project-name/ailleurs, puis de copier les fichiers à l'intérieur d'un appel final zip -r ...sur ce répertoire temporaire?

(Je recherche essentiellement une sorte de préfixe de chemin ou une option de chemin relatif.)

Réponses:


9

Peut-être que cela vous est déjà venu à l'esprit, mais pourquoi ne pas simplement utiliser un lien sym plutôt que de tout copier?

ln -s project-name project-name-version

utiliser ensuite zip -rvia le lien sym ( zipdéréférencer les liens sym par défaut)? Lorsque vous avez terminé, vous pouvez simplement rmcliquer sur le lien sym. Ce n'est peut-être pas la solution la plus élégante, mais je ne connais pas de moyen évident de le faire zipdirectement.


1
Cela fonctionne également avec tarsi vous utilisez l' -hindicateur.
Kyle Strand

(J'utilise également le zdrapeau; je ne sais pas si cela l'affecte.)
Kyle Strand

15

C'est plus un conseil qu'une réponse: utilisez Git !

Si vous configurez un référentiel Git pour votre projet, le tout devient assez simple:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip

1
Excellent conseil, merci. documentation d'archive git: git-scm.com/docs/git-archive
Meglio

1
Bien que l'utilisation du contrôle de version soit une bonne idée, cette réponse ne correspond pas à la question du cas générique.
raimue

@Raim "C'est plus un conseil qu'une réponse: utilisez Git!" écrit là depuis comme 4 ans, merci de l'avoir signalé ...
cYrus

1
Si ce n'était pas prévu comme réponse, cela devrait être converti en commentaire.
raimue

1
@Gregor Je pense que c'est un comportement souhaitable car de tels fichiers font en fait partie du projet, de toute façon vous pouvez utiliser les attributs Git, par exemple, créer un fichier nommé .gitattributescontenant .git* export-ignore.
cYrus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.