linux下快速打包/多线程压缩文件的方法

本文介绍了在Linux环境下如何处理大量文件的打包和压缩问题。当遇到10万个图片文件需要打包传输时,由于直接使用zip命令会导致Argumentlisttoolong错误,因此采用find配合tar命令进行打包。在打包过程中,遇到文件大小异常问题,最终通过打包整个文件夹解决了问题。此外,文章还介绍了多线程压缩工具pigz,它可以与tar结合使用提高压缩效率,并提供了不同使用场景的示例,如调整压缩级别和指定核心数。最后,文章提到了mac下的使用方法和解压操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今日遇到一个问题,就是把一个远程主机生成的10万个图片文件(训练集)传到kaggle。所以第一个遇到的问题,就是将这10万个图片打包。

打包大量文件

首先如果直接打包文件(非文件夹),会提示zip: Argument list too long。所以需要参照这篇博文使用find配合zip打包,发现开始速度很快,但是过了12小时居然还没结束(可能是因为远程主机的IO资源受限了,通过top命令查看cpu和mem占用并不大)。
后来又折腾了find配合tar命令:

find 200x100-4chars/  |xargs -i  tar -cvf 4chars2.tar {}

发现一个奇怪现象,当文件达到一定大小之后(应该是达到预计大小),控制台还在不断输出,但是目标文件大小突然变成0k-20k之间变化。
最后的解决方案是整个文件夹一起打包,1秒完成

tar -cf 目标文件名 文件夹
#例如
tar -cf data.tar dataset

2. 多线程压缩文件

在这过程中,又发现了pigz这个支持多线程压缩的软件,所以一并将相关内容放这里。
安装:

sudo apt install pigz

2.1 与tar配合使用

# 打包压缩
tar --use-compress-program=pigz -cvpf XXX.tgz path/files
# 解压
tar --use-compress-program=pigz -xvpf XXX.tgz

2.2 更多用法

#用法: pigz [options] [files ...]
#-0 to -9, -11 : 压缩级别
#-p n : 指定压缩核心数,默认8个
#-k :压缩后保留原文件

#压缩文件
pigz -6 -p 10 -k filename
#压缩后生成 filename.gz文件

#压缩目录
tar cvf - /data/test | pigz -6 -p 10 -k > test.tar.gz

#自动选择最大线程打包压缩
tar -cvf - 文件夹1 文件夹2 | pigz -p $(nproc) > dstname.tar

#mac下使用:
tar -cvf - folder1 folder2 | pigz -p $(sysctl -n hw.ncpu) > dstname.tar

#解压文件
gzip -d filename.gz

#或者
pigz -d filename.gz

#解压目录
tar xvfz filename.tar.gz
#或者
pigz -d filename.tar.gz
#注:使用pigz解压后是一个tar

参考资料:

  1. pigz快速压缩
  2. find 命令解决mv: invalid option – ‘E‘和Argument list too long问题
  3. Linux下如何快速打包大量文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值