Linux: Angabe des Top-Level-Verzeichnisses bei der Erstellung des Zip-Archivs


17

Ich habe ein Projekt mit der üblichen Verzeichnisstruktur (src /, bin /, ...), dh

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

Und möchte ein Archiv mit folgender Verzeichnisstruktur anlegen:

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

Gibt es eine gute Möglichkeit, um zu verhindern, dass ein temporäres Verzeichnis erstellt project-name/wird und die Dateien anschließend in ein temporäres Verzeichnis kopiert werden, das abschließend aufgerufen wird zip -r ...?

(Ich suche im Grunde nach einer Art Pfadpräfix oder einer relativen Pfadoption.)

Antworten:


9

Vielleicht ist Ihnen das schon eingefallen, aber warum nicht einfach einen Sym-Link verwenden, anstatt alles zu kopieren?

ln -s project-name project-name-version

Dann zip -rüber den Sym-Link verwenden ( zipwerden Sym-Links standardmäßig dereferenziert)? Wenn Sie fertig sind, können Sie einfach rmden Sym-Link. Vielleicht ist es nicht die eleganteste Lösung, aber ich kenne keinen offensichtlichen Weg, um es zipdirekt durchzuziehen.


1
Dies funktioniert auch, tarwenn Sie die -hFlagge verwenden.
Kyle Strand

(Ich benutze auch die zFlagge; ich bin mir nicht sicher, ob dies Auswirkungen hat.)
Kyle Strand

15

Dies ist eher ein Rat als eine Antwort: Nutze Git !

Wenn Sie ein Git- Repository für Ihr Projekt einrichten , wird das Ganze ganz einfach:

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

1
Exzellente Beratung, danke. Dokumentation zum Git-Archiv: git-scm.com/docs/git-archive
Meglio

1
Obwohl die Verwendung der Versionskontrolle eine gute Idee ist, stimmt diese Antwort nicht mit der Frage für den allgemeinen Fall überein.
Raimue

@Raim "Dies ist mehr ein Rat als eine Antwort: benutze Git!" geschrieben dort seit wie 4 Jahren, danke für den Hinweis ...
Cyrus

1
Wenn dies nicht als Antwort gedacht war, sollte es in einen Kommentar umgewandelt werden.
Raimue

1
@Gregor Ich denke , das ist ein wünschenswertes Verhalten als solche Dateien tatsächlich Teil des Projekts sind, trotzdem können Sie mit Git Attribute, zum Beispiel, erstellen Sie eine Datei mit dem Namen .gitattributesenthalten .git* export-ignore.
CYRUS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.