我正在尝试编写一个脚本来下载 tarball来自 github并从中提取单个文件。
但是 tarball 中的顶层目录中有一些随机字符,我认为在 repo/tarball 更新时这些字符会发生变化,这使得很难可靠地指定我想要提取的文件的路径。
这有效:
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'
基本上,我想用一些通用的东西替换所有随机生成的字符,这样我就不必在随机字符发生变化时编辑脚本。
我考虑过将 tar 输出写入标准输出,然后通过管道传输到可以仅抓取 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]
有任何想法吗?
答案1
找到了答案,很简单,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
答案2
也许是一些 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;
}
}
未经测试,但请查看:
http://perldoc.perl.org/Archive/Tar.html
和