Comment déballer un fichier séparé de l'archive avec des noms de répertoires générés aléatoirement?

J'essaie d'écrire un script qui téléchargera Tarball
https://github.com/paulp/sbt-extras/downloads
Et supprimer un fichier de celui-ci.

Cependant, dans le répertoire de niveau supérieur à l'intérieur tarball Il y a plusieurs symboles aléatoires qui me semblent changer lors de la renouvellement de repo / tarball, Ce qui rend difficile de spécifier en toute sécurité le chemin du fichier que je veux extraire.

Ça marche:

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

Mais je veux quelque chose comme ça:

wget [url=https://github.com/paulp/sbt-extras/tarball/master]https://github.com/paulp/sbt-extras/tarball/master[/url] -O sbt-extras.tar.gz
tar --strip-components=1 -xf 'sbt-extras.tar.gz' '[generic tld placeholder]/sbt'

En fait, je veux remplacer tous les caractères générés de manière aléatoire avec quelque chose de courant, donc je n'ai pas besoin de modifier le script à chaque fois que des caractères aléatoires sont modifiés.

J'ai pensé à écrire une sortie tar dans la sortie standard, puis connectez-vous à quelque chose qui pourrait capturer uniquement le fichier sbt Et jeter le reste, mais je ne savais pas quel outil utiliser pour cela:

wget [url=https://github.com/paulp/sbt-extras/tarball/master]https://github.com/paulp/sbt-extras/tarball/master[/url] -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]

Des idées?
Invité:

Agathe

Confirmation de:

Peut-être 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;
}
}

Pas vérifié, mais regarde:

http://perldoc.perl.org/Archive/Tar.html
et

http://perldoc.perl.org/Archive/Tar/File.html

Alice

Confirmation de:

Trouvé la réponse, il s'est avéré si simple, vient à la rescousse grep:

wget [url=https://github.com/paulp/sbt-extras/tarball/master]https://github.com/paulp/sbt-extras/tarball/master[/url] -O sbt-extras.tar.gz
tar --strip-components=1 -xf 'sbt-extras.tar.gz' -O | grep sbt > sbt

Pour répondre aux questions, connectez-vous ou registre