bash:仅提取tar.gz归档文件的一部分 [英] bash: extract only part of tar.gz archive
问题描述
我有一个大 .tar.gz
文件,由于空间不足,我无法将其全部提取出来.我想提取 一半其内容,对其进行处理,然后提取剩余的一半.
I have a very large .tar.gz
file which I can't extract all together because of lack of space. I would like to extract half of its contents, process them, and then extract the remaining half.
档案包含几个子目录,这些子目录又包含文件.提取子目录时,需要 all 的所有内容才能与之一起提取.
The archive contains several subdirectories, which in turn contain files. When I extract a subdirectory, I need all its contents to be extracted with it.
在 bash 中执行此操作的最佳方法是什么? tar
已经允许了吗?
What's the best way of doing this in bash? Does tar
already allow this?
推荐答案
好,所以根据此答案,我可以列出所需深度的所有内容.就我而言,tar.gz文件的结构如下:
OK, so based on this answer, I can list all contents at the desired depth. In my case, the tar.gz file is structured as follows:
archive.tar.gz:
archive/
archive/a/
archive/a/file1
archive/a/file2
archive/a/file3
archive/b/
archive/b/file4
archive/b/file5
archive/c/
archive/c/file6
因此,我想遍历子目录 a,b,c
,例如,提取其中的前两个:
So I want to loop over subdirectories a, b, c
and, for instance extract the first two of them:
parent_folder='archive/'
max_num=2
counter=0
mkdir $parent_folder
for subdir in `tar --exclude="*/*/*" -tf archive.tar.gz`; do
if [ "$subdir" = "$parent_folder" ];
then
echo 'not this one'
continue
fi
if [ "$counter" -lt "$max_num" ];
then
tar zxvf archive.tar.gz $subdir -C ./${parentfolder}${subdir}
counter=$((counter + 1))
fi
done
接下来,对于其余文件:
Next, for the remaining files:
max_num=2
counter=0
mkdir $parent_folder
for subdir in `tar --exclude="*/*/*" -tf files.tar.gz`; do
if [ "$subdir" = "$parent_folder" ];
then
echo 'not this one'
continue
fi
if [ "$counter" -ge "$max_num" ];
then
tar zxvf files.tar.gz $subdir -C ./${parent_folder}$subdir
fi
counter=$((counter + 1))
done
这篇关于bash:仅提取tar.gz归档文件的一部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!