当我从AWS S3下载一个S3文件,然后尝试解压缩它时,我会得到以下错误:
tar -xzvf filename_backup_jan212021_01.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
当我检查它是哪种类型的文件时,我得到以下信息:
file filename_backup_jan212021_01.tar.gz
filename_backup_jan212021_01.tar.gz: ASCII te
我有脚本来验证tar文件是有效的。在本例中,我使用的是cat,但实际上我正在验证亚马逊的s3文件流。
#!/bin/bash
cat $1 | tar zxf - > /dev/null
if [ $? -eq 0 ]; then
echo "File is ok ... $1"
else
echo "File is corrupted ... $1"
fi
问题是tar文件提取.tar.gz中的文件。我尝试过不同的变体,如tar -C /dev/null,但没有运气。它要么失败,要么将文件输出到磁盘。
如何在不编写文件的情况下提取tar
我想读取.tar文件中的内容,而不提取tar文件。我尝试了我的本地机器,并成功地,我能够读取文件的内容。只是,我传递了.tar文件的路径。为此,我使用了一个名为tarfile的库。在图书馆的帮助下我做到了。现在,我试图在AWS中使用lambda函数进行同样的操作,但我无法做到。你能给我建议其他办法吗?
import tarfile
file_path = r'C:/Users/xyz/Downloads/abc.tar'
tar = tarfile.open(file_path, "r:gz")
for member in tar.getnames():
我有一个星火作业,它以数千个文件作为输入,并从亚马逊S3下载它们,并在地图阶段处理它们,其中每个映射步骤都返回一个字符串。我想压缩输出到.tar.gz文件,然后上传到S3。一种方法就是
outputs = sc.map(filenames).collect()
for output in outputs:
with tempfile.NamedTemporaryFile() as tar_temp:
tar = tarfile.open(tar_temp.name, "w:gz")
for output in outputs:
我正在尝试从互联网上下载一些公共数据集并解压它。因为我想下载几个.tar.gz文件,将它们放在一个文件夹中,然后将它们全部解压,所以我在循环中这样做。下载可以工作,tar命令可以在终端中工作,但不能在我的bash脚本中工作。我不理解这种不一致的行为。
#!/bin/sh
PATH="$(pwd)/data"
cd $PATH
/usr/bin/curl "https://s3.eu-central-1.wasabisys.com/aicrowd-public-datasets/myfoodrepo/round-2/val.tar.gz" --output v