Como descompactar um único arquivo de um arquivo com nomes de diretório gerados aleatoriamente?

1

Estou tentando escrever um script que faça o download de um tarball do github e extraia um único arquivo dele .

No entanto, o diretório de nível superior dentro do tarball tem alguns caracteres aleatórios, o que acho que mudam quando o repositório / tarball é atualizado, dificultando a especificação confiável do caminho para o arquivo que eu quero extrair.

Isso funciona:

wget https://github.com/paulp/sbt-extras/tarball/master
tar --strip-components=1 -xf 'paulp-sbt-extras-d6c7222.tar.gz' 'paulp-sbt-extras-d6c7222/sbt'

Mas eu quero algo assim:

wget https://github.com/paulp/sbt-extras/tarball/master -O sbt-extras.tar.gz
tar --strip-components=1 -xf 'sbt-extras.tar.gz' '[generic tld placeholder]/sbt'
Basicamente eu quero substituir todos os caracteres gerados aleatoriamente por algo genérico, então não preciso editar o script a qualquer momento que os caracteres aleatórios mudam.

Pensei em escrever a saída do tar como padrão e, em seguida, em algo que pudesse pegar apenas o arquivo sbt e descartar o resto, mas não tenho certeza de qual ferramenta usar para isso:

wget https://github.com/paulp/sbt-extras/tarball/master -O sbt-extras.tar.gz
tar --strip-components=1 -xf 'sbt-extras.tar.gz' -O - | [grab the sbt file, write it, and discard everything else]

Alguma idéia?

    
por Kurtosis 16.03.2012 / 20:37

2 respostas

1

Encontrei a resposta, foi tão simples, grep para o resgate:

wget https://github.com/paulp/sbt-extras/tarball/master -O sbt-extras.tar.gz
tar --strip-components=1 -xf 'sbt-extras.tar.gz' -O | grep sbt > sbt
    
por 16.03.2012 / 20:50
1

Talvez algum Perl?

use Archive::Tar;

$targetfile = 'sbt';

my $tar = Archive::Tar->new;
$tar->read('sbt-extras.tar.gz');

my @items = $tar->get_files;
for $item (@items) {
  if ($item->name eq "$targetfile") {
    $item->extract;
  }
}

Não testado, mas veja:

link

e

link

    
por 16.03.2012 / 20:51