Criar versão de lançamento usando tar

2

Eu tenho um projeto com as coisas usuais (código fonte, yadda, yadda) e eu quero ter um comando para o Scons (mas pode ser qualquer sistema de compilação para ser honesto) que faça o seguinte:

  1. Construa o sistema - isso é fácil.
  2. Crie uma bola de alcatrão do sistema - isso é fácil.
  3. Quando o conteúdo da tarball é extraído, eles extraem em um diretório fubar-VERSION/ - essa é a parte difícil.

Eu posso fazer o último manualmente, criando um link simbólico, então tar ing de um diretório acima do projeto um, mas sinto-me deselegante. Alguma idéia?

Para esclarecer, quero poder fazer isso:

; pwd
~/project
; scons release
[...]
; cp project-X.Y.Z.tbz /tmp
; cd /tmp
; tar jxvf project-X.Y.Z.tbz
./project-X.Y.Z/[...]

Assim, os arquivos são extraídos em um diretório nomeado após o projeto com o direito número da versão.

    
por Sardathrion 01.03.2012 / 11:19

2 respostas

5

Com o tar do GNU:

tar cjf ../fubar-4.2.tar.bz2 --transform='s/^\./fubar-4.2/' --exclude='*.o' .

As implementações tradicionais de tar não têm como fazer isso. Mesmo o FreeBSD tar não tem nenhum recurso similar que eu saiba.

Com pax , o substituto POSIX para cpio e tar:

pax -w -s '/^\./fubar-4.2/' -s '/\.o$//' . | bzip2 >../fubar-4.2.tar.bz2

Embora pax seja obrigatório nos padrões atuais POSIX / Single Unix, muitas distribuições Linux não o instalam por padrão. Se você suportar tanto o GNU tar quanto o pax, você cobrirá quase todos os unices não incorporados por aí.

    
por 01.03.2012 / 13:53
2

Pelo menos bsdtar 2.8.4 e acima tem a opção -s pattern para modificar os nomes dos membros de arquivo ou arquivo, de acordo com o padrão de expressão regular fornecido.

# using '^\.' as pattern
bsdtar -czvf test.tar.gz .
bsdtar -tzvf test.tar.gz
bsdtar -s '|^\.|archive-X.Y.Z|' -xzvf test.tar.gz

# using '^[^/]*' as pattern
bsdtar -C .. -czvf test.tar.gz "$(basename "$(pwd -P)")"
bsdtar -tzvf test.tar.gz
bsdtar -s '|^[^/]*|archive-X.Y.Z|' -xzvf test.tar.gz
    
por 05.03.2012 / 14:55

Tags