Como copiar um .zip de dentro de um .tar para um determinado local sem extrair todo o .tar usando o AWS S3 CLI

1

OSX 10.11 - python3.5 ou AWS CLI (ou outra ferramenta?)

Eu tenho ~ 5.000 subdiretórios em um bucket do Amazon S3, cada subdiretório contém um único .tar. Em cada .tar ele contém apenas um .zip, ~ < 1mb em tamanho.

O que eu gostaria de fazer é executar um script que acessará cada subdiretório dentro do bucket do S3 e copiar este .zip encontrado dentro de cada .tar para um determinado local s3 ou para um destino local.

Cada .tar é ~ 10-15GB quando descompactado, portanto, extrair todo o conteúdo não é viável / desejado. Eu acredito que o cabeçalho .tar possa ser lido, a fim de localizar o .zip e copiar.

Você pode me dizer como posso conseguir isso

    
por bjmarra 14.01.2016 / 23:58

1 resposta

1

para extrair um único arquivo chamado zipfile.zip do arquivo tarfile.tar:

tar xvf /path/to/tarfile.tar /path/to/where/you/want/zipfile.zip

Você pode usar o perl para reciclar

#!/usr/bin/perl
my @directories_to_search = ('/root/path/to/s3/dir/');
use File::Find;
use File::Basename;

finddepth(\&extract_zip, @directories_to_search);

sub extract_zip {
    return unless /tar$/; # ignore all but tar files
    my $tarname = $File::Find::name;
    'tar xvf "$tarname" /desired/path/name-of-zip-inside-archive.zip';
}

Algo muito próximo ao acima deve funcionar. (testado no El capitan). O problema que você pode ter é se o nome do arquivo zip é diferente em cada arquivo TAR. Se for, você precisará se apossar do nome do zip dentro do tar antes de extrair (ou se houver uma correspondência de padrão, por exemplo, * .zip, você pode tentar isso)

    
por 15.01.2016 / 01:43