Linux: specifica della directory di livello superiore durante la creazione dell'archivio zip


17

Ho un progetto con la solita struttura di directory (src /, bin /, ...), cioè

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

E vorrei creare un archivio con la seguente struttura di directory:

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

Esiste un modo accurato per farlo, che evita di creare una directory temporanea project-name/altrove, quindi di copiare i file all'interno di una zip -r ...directory che si sta finalmente richiamando ?

(Sto fondamentalmente cercando una sorta di prefisso del percorso o relativa opzione del percorso.)

Risposte:


9

Forse questo ti è già successo, ma perché non usare semplicemente un link sym anziché copiare tutto?

ln -s project-name project-name-version

quindi utilizzare zip -rtramite il collegamento sym ( zipper impostazione predefinita verranno indicati i collegamenti sym)? Quando hai finito puoi semplicemente rmil link sym. Forse non è la soluzione più elegante, ma non conosco un modo ovvio per farlo zipdirettamente.


1
Questo funziona anche con tarl'uso della -hbandiera.
Kyle Strand,

(Sto anche usando la zbandiera; non sono sicuro che ciò influisca.)
Kyle Strand,

15

Questo è più un consiglio che una risposta: usa Git !

Se imposti un repository Git per il tuo progetto, tutto diventa abbastanza semplice:

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

1
Ottimo consiglio, grazie. documentazione archivio git: git-scm.com/docs/git-archive
Meglio

1
Mentre l'utilizzo del controllo versione è una buona idea, questa risposta non corrisponde alla domanda per il caso generico.
raimue

@Raim "Questo è più un consiglio che una risposta: usa Git!" scritto lì da circa 4 anni, grazie per averlo sottolineato ...
cYrus

1
Se questa non è stata intesa come una risposta, dovrebbe essere convertita in un commento.
raimue

1
@Gregor Penso che sia un comportamento desiderabile poiché tali file fanno effettivamente parte del progetto, in ogni caso puoi usare gli attributi Git, ad esempio, creare un file che .gitattributescontiene .git* export-ignore.
cYrus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.