如何在最短的时间内读取 1TB 压缩文件 [关闭]
Posted
技术标签:
【中文标题】如何在最短的时间内读取 1TB 压缩文件 [关闭]【英文标题】:How to read 1TB zipped file in minimum time [closed] 【发布时间】:2016-06-20 06:11:29 【问题描述】:我正在尝试读取压缩文件。我正在使用命令tar tf abc.tar.xz
执行此操作。因为文件的大小是1TB所以需要很多时间。我对 bash 脚本不太熟悉。我还有其他命令,例如 zcat 3532642.tar.gz | more
和 tar tf 3532642.tar.xz |grep --regex="folder1/folder2/folder3/folder4/"
和
tar tvf 3532642.tar.xz --to-command \
'grep --label="$TAR_FILENAME" -H folder1/folder2/folder3/folder4/ ; true'
但在执行文件以读取其内容所需的时间方面,我发现它们之间没有太大区别。
有谁知道我怎样才能在最短的时间内为压缩文件处理如此大量的数据。任何帮助将不胜感激!!!
【问题讨论】:
你不会加快解压速度,你可以在之后加快你在流上所做的事情。请清楚地表明您对解压缩的流做了什么。 我想读取压缩文件的内容而不实际解压缩它,并希望对 1TB 文件执行此操作。你能告诉我如何在最短的时间内完成吗? 解压不会有时差,最容易使用的是zcat
。
您可以尝试pigz
进行解压缩(它是多线程的),但我怀疑如果您观看top
,您的tar
命令将处于100% cpu 并且将成为瓶颈.
我不会承诺“最佳”,但它可能比 zcat 更快——等等,你的文件是 xz
而不是 gz
。 pigz
不起作用。见askubuntu.com/questions/258202/multi-core-compression-tools
【参考方案1】:
正如rrauenza
所提到的,由于pigz
可能不适用于xz
格式,因此有一个类似的工具pixz
用于并行、索引xz 压缩/解压缩。
从man
page 可以看出Pigz
使用线程压缩/解压缩以利用多个处理器和内核。
与pigz
类似,此命令还提供了一个选项来指定可以在多个内核中并行调用的线程数,以实现最大性能。
-p --processes n
Allow up to n processes (default is the number of online processors)
或者您可以手动从 bash 命令getconf _NPROCESSORS_ONLN
中获取内核数并将值设置为-p
。
更多详情来自pixz
的GitHub
页面以及如何下载和安装的详细信息
(或)
仅使用tar
的解决方案,只有在事先知道文件名的情况下才能完成
tar -zxOf <file-name_inside-tar> <file-containing-tar>
选项如下:-
-f, --file=ARCHIVE
use archive file or device ARCHIV
-z, --gzip
filter the archive through gzip
-x, --extract, --get
extract files from an archive
-O, --to-stdout
extract files to standard output
可能不如pigz
有效,但仍能胜任。
【讨论】:
但正如 rrauenza 所说,它不能用于 .xz 扩展名。您能针对这种情况提出任何建议吗? @MKB:你能用tar
试试替代解决方案吗,如果它也不起作用,我会删除答案
这项工作已经使用tar
完成,但问题是我在问题描述中提到的执行时间。
@Inian 只需将您的答案调整为来自此处的xz
兼容工具:askubuntu.com/questions/258202/multi-core-compression-tools
@Inian 你可能想推荐foo | tar
方法?以上是关于如何在最短的时间内读取 1TB 压缩文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
具有数千个签名的防病毒软件如何在很短的时间内扫描文件? [关闭]