从目录树中执行 tar.gz 的最快方法?

从目录树中执行 tar.gz 的最快方法?

我有一个目录树,其中包含如下文件:


|-- 00
| |-- 00
| | |-- 00
| | |-- 01
| | |-- 02
| | |-- 03
| | |-- 04
| | |-- 05
[..]
| | |-- 97
| | |-- 98
| | `-- 99
| |-- 01
| | |-- 00
| | |-- 01
[...]

每个目录最后大约有200个文件,所以文件很多。制作整个内容的 tar.gz 的最快方法是什么?我可以为多个 CPU 并行执行任务吗?

答案1

您只需要指定一个(或多个)要包含的顶级目录,并将tar递归地深入到它的所有子目录并将所有内容包装起来:

tar cvfz output.tar.gz /path/to/top_folder

(正如 @forcefsck 所指出的,如果对象是原始速度,您可以v在终端上忽略该选项以减少冗长。通过不回显每个文件,它会添加您在与终端对话的 I/O 时间上节省一点。)

答案2

您可以通过以下方式将--fast, 这是 , 选项的别名传递给gzip:-1

GZIP=--fast tar czf output.tar.gz /path/to/top_folder

或者

GZIP=-1 tar czf output.tar.gz /path/to/top_folder

在某些环境中,该变量可以GZIP_OPT代替GZIP

答案3

在 ext[234] 文件系统上,我发现dump比 tar 快得多,特别是对于许多小文件,例如 Maildir。它还使用多个核心进行并发压缩。我建议对 1mb 块大小使用 -b 1024,这比默认的 10kb 块大小要好得多。

答案4

是的,使用 Pigz:

 tar --use-compress-program="pigz --best --recursive" -cf file.tar.gz folder/
 tar -cf file.tar.gz -I pigz folder/

相关内容