我正在尝试编写一个脚本,它将从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
和