我有一个目录树,其中包含如下文件:
。 |-- 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/