Я пытаюсь написать сценарий, который загрузит тарбол из github и извлеките из него один файл.
Однако в каталоге верхнего уровня внутри tarball есть несколько случайных символов, которые, как мне кажется, меняются при обновлении репо / 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]
Любые идеи?
Может какой-нибудь 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
и
Нашел ответ, оказалось так просто, на помощь приходит 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