OSX 10.11-python3.5 或 AWS CLI(或其他工具?)
我在 Amazon S3 存储桶内有大约 5,000 个子目录,每个子目录包含一个 .tar。每个 .tar 中仅包含一个 .zip,大小约为 1mb。
我想要做的是运行一个脚本,该脚本将访问 S3 存储桶内的每个子目录,并将每个 .tar 中找到的 .zip 复制到给定的 s3 位置或本地目的地。
每个 .tar 解压后约为 10-15GB,因此提取全部内容不可行/不需要。我相信可以读取 .tar 标头,以便找到 .zip 并进行复制。
你能告诉我实现这一目标的方法吗
答案1
从存档 tarfile.tar 中提取一个名为 zipfile.zip 的文件:
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`;
}
与上述非常接近的方法应该可以工作。(在 El capitan 中测试)。您可能遇到的问题是每个 tar 存档中的 zip 文件名是否不同。如果是这样,您需要在提取之前获取 tar 中的 zip 名称(或者如果有模式匹配,例如 *.zip,您可以尝试这样做)