我有大量文件(未压缩时约 100GB),我想将其存储在小于 2GB 的块中,以便在基于 Windows Server 的存储系统上进行备份。我在工作站上运行 Ubuntu。
数据集收集在子目录中,具有分层结构。(例如,目录 A 包含三个子目录 1、2、3,每个子目录可能包含 30 个子目录,每个子目录包含 6 或 7 个文件,并且名称相同(在每个子目录中))
tar
会压缩并存档我的数据,但如果我想访问单个部分,那就相当麻烦了。它也很慢,如果我使用压缩,我必须先解压,然后才能提取单个目录(据我所知)
这会使用类似如下的东西:
tar -cf mySuperStructure.tar;
split -b 1024M mySuperStructure.tar mySuperStructure.tar.part- ;
gzip mySuperStructure.tar.part-* ;
或类似 - 我知道 tar 有一个-z
选项,但我认为这在使用时可能会有问题split
?同样,我相信有一个选项可以拆分tar
档案,可能带有压缩,但文件以无用的方式拆分(也许这是最好的解决方案,如果是这样 - 请提供意见)
或者,dar
将按文件级别压缩文件,允许-m
指定最小大小。这将是理想的,但对于大量文件来说,压缩和存档设置需要很长时间。最低级别的目录大小约为 70MB,因此压缩这些目录会很有用(而且我怀疑速度会更快,因为压缩操作更少?)
我可以单独指定子目录的压缩,而不压缩单个文件吗?如果可以的话,这会更快吗?
手动实施可能如下所示:
for levelA in $(ls); do
cd levelA;
for subdirectoryCase in $(ls); do
cd subdirectoryCase;
for subdirSmall in $(ls); do
gzip subdirSmall;
done
cd ..;
tar -cf $subdirectoryCase.tar $subdirectoryCase;
gzip $subdirectoryCase.tar;
done
cd ..;
tar -cf $levelA.tar $levelA;
gzip $levelA.tar;
done
tar -cf superStructure.tar levelA1.tar levelA2.tar levelA3.tar;
gzip superStructure.tar;
但这似乎可能是微观管理到可怕的程度(但这可能仍然是最好的,我不知道?)dar
可以替代tar
整个过程,并且split
可以在最终之前使用gzip
,假设早期的 gzip 文件足够小(它们不会,但大概可以用类似的方式处理)