【发布时间】:2019-05-04 04:13:50
【问题描述】:
我有数百万个 *.csv 小文件,我想用 gzip 对它们进行压缩。
用gzip逐个循环压缩是可以的,但是效率不够。
我想知道是否有一种方法可以有效地做到这一点?通过多处理或其他方式?
【问题讨论】:
-
如果您为每个输入文件创建一个压缩文件,为什么要
tar.gz而不仅仅是.gz?tar的整个point是将多个输入文件一起归档到一个流中。 -
也就是说,如果您关心效率,我根本不会为此目的使用 gzip。选择一种文件格式,让您使用预先构建的共享压缩表,在压缩大量小文件时,您将获得更好的比率;参见例如
zstd。 -
也就是说,如果您的目标只是为了避免每个文件启动一次 gzip 的低效率,
find . -type f -name '*.csv' -exec gzip -- {} +将传递尽可能多的文件名给gzip的每个副本,以适合命令行。 -
将它们全部放在一个
.tar.gz文件中。这将为所有这些组合使用单个 LZW 压缩表,这应该会产生更有效的压缩。如果您真的希望它们在单独的文件中,请使用 GNU Parallel 并行运行 gzip。 -
查看上面的 Charles 的 cmets 并在此处查看...stackoverflow.com/a/34166037/2836621
标签: python linux shell gzip tar