1

OSX 10.11 - python3.5 или AWS CLI (или другой инструмент?)

У меня есть ~ 5000 подкаталогов в корзине Amazon S3, каждый подкаталог содержит один .tar. В каждом .tar содержится только один .zip, размером ~ <1mb.

То, что я хотел бы сделать, это запустить скрипт, который будет обращаться к каждому подкаталогу в корзине S3 и копировать этот ZIP-файл, найденный в каждом .tar, либо в указанное местоположение s3, либо в локальное место назначения.

Каждый .tar составляет ~ 10-15 ГБ в несжатом виде, поэтому извлечение полного содержимого нецелесообразно / нежелательно. Я верю, что вместо этого можно прочитать заголовок .tar, чтобы найти .zip и скопировать.

Можете ли вы сказать мне, как я могу достичь этого

1 ответ1

1

вытащить один файл с именем zipfile.zip из архива tarfile.tar:

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

Вы можете использовать Perl для рекурсии

#!/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`;
}

Что-то очень близко к вышесказанному должно работать. (проверено в Эль-Капитане). Проблема, с которой вы можете столкнуться, заключается в том, что имя файла zip отличается в каждом архиве tar. Если это так, перед извлечением вам понадобится получить название zip внутри tar (или, если есть совпадение с шаблоном, например * .zip, вы можете попробовать это вместо этого)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .