Linux: Especificando o Diretório de Nível Superior ao Criar Archive Zip

17

Eu tenho um projeto com a estrutura de diretórios usual (src /, bin /, ...), ou seja,

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

E gostaria de criar um arquivo com a seguinte estrutura de diretórios:

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

Existe uma maneira elegante de fazer isso, que evita a criação de um diretório temporário em project-name/outro lugar e, em seguida, a cópia dos arquivos dentro de uma finalmente chamada zip -r ...nesse diretório temporário?

(Basicamente, estou procurando algum tipo de prefixo de caminho ou opção de caminho relativo.)

Leden
fonte

Respostas:

9

Talvez isso já tenha ocorrido a você, mas por que não usar apenas um link sym em vez de copiar tudo?

ln -s project-name project-name-version

depois use zip -rpelo link sym ( zipdesreferenciar links sym por padrão)? Quando terminar, basta rmclicar no link sym. Talvez não seja a solução mais elegante, mas não conheço uma maneira óbvia de fazê-lo zipdiretamente.

Erro fatal
fonte
1
Isso também funciona tarse você usar a -hbandeira.
Kyle Strand
(Eu também estou usando a zbandeira, eu não tenho certeza se isso afeta-lo.)
Kyle Strand
15

Este é mais um conselho do que uma resposta: use o Git !

Se você configurar um repositório Git para o seu projeto, tudo se tornará bem direto:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip
cYrus
fonte
1
Excelente conselho, obrigado. Documentação do arquivo git: git-scm.com/docs/git-archive
Meglio
1
Embora o uso do controle de versão seja uma boa idéia, essa resposta não corresponde à pergunta do caso genérico.
raimue
@Raim "Isso é mais um conselho do que uma resposta: use o Git!" escrito lá desde como 4 anos, obrigado por apontar isso ...
Cyrus
1
Se isso não foi uma resposta, ele deve ser convertido em um comentário.
raimue
1
@ Gregor Eu acho que é um comportamento desejável, pois esses arquivos são realmente parte do projeto. De qualquer maneira, você pode usar os atributos Git, por exemplo, criar um arquivo chamado .gitattributescontendo .git* export-ignore.
precisa saber é