7z是否内置高效提取大量文件的选项?Ubuntu下提取优化咨询
7-Zip解压大量小文件速度暴跌的解决思路
先升级7-Zip版本再说
你用的16.02是2016年的老版本,对Linux下大量小文件的IO处理效率极低,官方后续版本针对这类场景做了很多优化。升级到23.01及以上版本后,很多性能问题会直接消失,大概率不用额外脚本就能把耗时压下来。
Ubuntu上装新版可以用官方PPA:
sudo add-apt-repository ppa:nijel/7z sudo apt update sudo apt install p7zip-full p7zip-rar
7-Zip内置参数优化
多线程解压
用-mmt=N指定线程数(N填CPU核心数,比如8核就写-mmt=8),新版7-Zip的多线程能并行处理文件元数据和IO队列,对小文件解压的速度提升明显:
7z x your_archive.7z -mmt=8 -o./extract_path
临时目录辅助
如果目标目录所在磁盘IO性能一般,用-w指定一个IO更快的临时目录(比如内存盘),不过这个更多是针对压缩时的优化,解压时聊胜于无:
7z x your_archive.7z -w./fast_temp_dir -o./final_dir
关于自动分目录的问题
7-Zip本身没有内置的“将平级大量文件自动分到子目录”的功能——它只能严格按照压缩包内的目录结构解压。你的并行移文件脚本已经是很高效的解决方案了,要是想更无缝,可以结合7z的管道输出,边解压边按文件名哈希分目录:
7z l your_archive.7z -slt | grep -E "^Path =" | cut -d' ' -f3 | while read -r file; do hash_dir="./extract_dir/$(echo "$file" | sha1sum | cut -c1-2)" mkdir -p "$hash_dir" 7z x your_archive.7z -o"$hash_dir" "$file" done
这个方式不需要单独监控进程,直接批量按规则分目录提取。
总结
- 优先升级7-Zip到最新版,老版本的性能缺陷是核心问题;
- 配合
-mmt多线程参数能进一步压榨性能; - 7-Zip没有内置的自动分目录解压功能,你的并行脚本已经是不错的方案,哈希分目录的管道方式可以作为替代。
内容的提问来源于stack exchange,提问作者ChrisL
相关产品推荐
相关产品推荐

