Linux: Określanie katalogu najwyższego poziomu podczas tworzenia archiwum zip


17

Mam projekt ze zwykłą strukturą katalogów (src /, bin /, ...), tj

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

I chciałby utworzyć archiwum o następującej strukturze katalogów:

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

Czy istnieje dobry sposób, aby to zrobić, co pozwala uniknąć tworzenia katalogu tymczasowego w project-name/innym miejscu, a następnie kopiowania plików w celu wywołania zip -r ...tego katalogu tymczasowego?

(Zasadniczo szukam jakiegoś rodzaju prefiksu ścieżki lub opcji ścieżki względnej.)

Odpowiedzi:


9

Może to już ci się przydarzyło, ale dlaczego nie po prostu użyć łącza sym zamiast kopiować wszystko?

ln -s project-name project-name-version

następnie użyj zip -rłącza sym ( zipczy domyślnie dereferencje łączy sym)? Kiedy skończysz, możesz po prostu rmlink do sym. Być może nie jest to najbardziej eleganckie rozwiązanie, ale nie znam oczywistego sposobu, aby to zrobić zipbezpośrednio.


1
Działa to również w tarprzypadku korzystania z -hflagi.
Kyle Strand

(Używam również zflagi; nie jestem pewien, czy to na nią wpływa.)
Kyle Strand

15

To jest raczej rada niż odpowiedź: użyj Git !

Jeśli skonfigurujesz repozytorium Git dla swojego projektu, cała sprawa stanie się dość prosta:

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

1
Doskonała rada, dziękuję. Dokumentacja archiwum git: git-scm.com/docs/git-archive
Meglio

1
Chociaż używanie kontroli wersji jest dobrym pomysłem, ta odpowiedź nie pasuje do pytania dotyczącego ogólnego przypadku.
raimue 20.04.2016

@ Raim „To jest raczej rada niż odpowiedź: użyj Git!” napisane tam od 4 lat, dziękuję za zwrócenie na to uwagi
cYrus 20.04.16

1
Jeśli nie było to zamierzone jako odpowiedź, należy je przekształcić w komentarz.
raimue 20.04.2016

1
@Gregor Myślę, że jest to pożądane zachowanie, ponieważ takie pliki są faktycznie częścią projektu, w każdym razie możesz użyć atrybutów Git, np. Utworzyć plik o nazwie .gitattributeszawierającej .git* export-ignore.
cyr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.