Каталог Untar от большого tarball

С большим поиском и большим количеством предположения и проверки я натолкнулся на решение своей проблемы:

Первые dd rootfs отображают buildroot, создает:

sudo dd if=./output/images/rootfs.ext2 of=/dev/sdd3

Затем копия / начальная загрузка от sdd3 до sdd1, создайте menu.lst файл и копию по bzImage.

Наконец, личинка выполнения:

sudo grub --device-map=/dev/null
> device (hd0) /dev/sdd
> root (hd0,0)
> setup (hd0)
> quit

Включите диск в систему, и все загружается.

2
18.04.2012, 02:31
2 ответа

Я просто взял бы две передачи в нем:

$ tar -tf somefile.tar.gz | grep dir-i-am-looking-for | head -1
./foo/bar/dir-i-am-looking-for/somefile/bla/bla/bla
$ tar -xf somefile.tar.gz ./foo/bar/dir-i-am-looking-for

Я не вижу, что "подстановочный знак включает" опцию в tar GNU.

3
27.01.2020, 22:07
  • 1
    В этом случае я опустил бы | head -1. Так как он даже doesen't знает корректный путь, которым могло случиться так, что существует несколько каталогов с тем именем в архиве, поэтому дайте ему шанс проверить это. –  ktf 18.04.2012, 19:26
  • 2
    Да. Я включал его больше как вещь думать о, не требование. Полезная альтернатива была бы | dirname | sort -u –  Warren Young 18.04.2012, 20:04

Один способ использовать perl:

Содержание script.pl:

use warnings;
use strict;
use Archive::Tar;

## Check input arguments.
die qq[perl $0 <tar-file> <directory>\n] unless @ARGV == 2;

my $found_dir;

## Create a Tar object.
my $tar = Archive::Tar->new( shift );

## Get directory to search in the Tar object.
my $dir = quotemeta shift;

for ( $tar->get_files ) { 

    ## Set flag and extract when last entry of the path is a directory with same 
    ## name given as argument
    if ( ! $found_dir &&  $_->is_dir && $_->full_path =~ m|(?i:$dir)/\Z|o ) { 
        $found_dir = 1;
        $tar->extract( $_ );
        next;
    }   

    ## When set flag (directory already found previously), extract all files after
    ## it in the path.
    if ( $found_dir && $_->full_path =~ m|/(?i:$dir)/.*|o ) { 
        $tar->extract( $_ );
    }   
}

Это принимает, что два аргумента, сначала один файл TAR и второй каталог извлекают. Выполните его как:

perl script.pl test.tar winbuild
0
27.01.2020, 22:07

Теги

Похожие вопросы