如何解压 `.tgz` 目录,并 gzip 内存中提取的文件之一?
How to untar `.tgz` directory, and gzip one of the extracted files in memory?
TL;DR
我怎样才能取消tar 一个文件.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
的文件,然后压缩该文件流式传输并将 it 重定向到文件。像
tar xzOf "$tarfile" "$tarpath/foo.nii" | gzip -c > "$tarpath/foo.nii.gz"
然后您可以使用 tar xzf "$tarfile" --exclude "*.nii"
提取存档中的所有其他内容
TL;DR
我怎样才能取消tar 一个文件.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
的文件,然后压缩该文件流式传输并将 it 重定向到文件。像
tar xzOf "$tarfile" "$tarpath/foo.nii" | gzip -c > "$tarpath/foo.nii.gz"
然后您可以使用 tar xzf "$tarfile" --exclude "*.nii"