如何解开".tgz"目录,并对内存中提取的文件之一进行gzip



TL;DR
如何解压缩文件.tgz,然后选择性地对输出进行gzip?我提取的目录有几个文本文件和一个.nii文件。我想晚一点用gzip。

更多详细信息
第一种方法是按顺序执行。然而,我正在处理一个存储在BeeGFS文件系统上的巨大数据集(10k以上的tar档案(,有人告诉我最好在内存中分两步完成,因为BeeGFS不喜欢处理这样的大目录。

顺序法:

for tarfile in ${rootdir}/*.tgz; do
tarpath="${tarfile%.tgz}"
tar zxvf ${tarfile}       # (1) untar directory
gzip ${tarpath}/*.nii     # (2) gzip the .nii file
done

有没有办法把(1(和(2(结合起来?或者,关于如何有效地完成这一过程,你有其他建议吗
谢谢!

您可以从存档中提取一个文件(如果您知道文件名(,让tar将其写入标准输出,而不是-O文件,然后压缩该流并将其重定向到文件。类似的东西

tar xzOf "$tarfile" "$tarpath/foo.nii" | gzip -c > "$tarpath/foo.nii.gz"

然后,您可以使用tar xzf "$tarfile" --exclude "*.nii"提取存档中的所有其他内容

相关内容

最新更新