如何使用随机生成的目录名称从归档中解压单个文件?

我正在尝试编写一个脚本,它将从github下载一个tarball ,并从中提取一个文件。

然而,tarball里面的顶级目录里面有一些随机的字符,我认为当repo / tarball被更新时,它会发生变化,使得难以可靠地指定我想要提取的文件的path。

这工作:

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' 

但是我想要这样的东西:

 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' 

基本上我想用一般的东西replace所有随机生成的字符,所以我不必随意改变字符就编辑脚本。

我想把tar输出写成标准输出,然后用pipe道input一些可以抓取sbt文件并丢弃其余部分的东西,但不知道使用什么工具:

 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] 

有任何想法吗?

find答案,就这么简单,grep来救援:

 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 

也许一些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; } } 

未经testing,但看看:

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

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