Linux使用tar命令进行文件压缩解压工具
介绍
tar
是 Tape Archive
的缩写
tar.gz
-z
filter the archive through gzip
tar -czvf abc_$(date +%s).tgz abc --exclude=abc/logs
# 分片
split -b 4000M -d -a 1 abc.tar.gz abc.tar.gz.
-b 4000M
设置每个分割包的大小,单位还是可以K
-d
指定生成的分割包后缀为数字的形式
-a 1
设定序列的长度(默认值是2),即生成 abc.tar.gz.0-..
tar -zcvf abc.tar.gz abc | split -b 4000M -d -a 1 - abc.tar.gz.
# 分割后的压缩包解压命令
cat abc.tar.gz.* | tar -zxv
$ ls /data
file1 file2
$ pwd
/root
$ tar -C /data -cvf /tmp/z.tar.gz file1 file2
tar -tvf xxx.tar.bz
# 解压单个文件
tar -zxvf xxx.tar.gz logs/nginx.log
# 解压多个文件
tar -zxvf xxx.tar.gz logs/nginx.log.* [-C <dir>]
- 将执行 tar 命令的用户作为解压后的文件的所有者
tar --no-same-owner -zxvf xxx.tar.gz
tar.xz
xz 的压缩率更高
# 压缩
tar -cJf xx.tar.xz xx/
tar -vcJf xx.tar.xz xx/
# 解压
tar -xf xx.tar.xz
tar -xvf xx.tar.xz
tar.jz
-j
filter the archive through bzip2
# 压缩
tar jcvf xxx.tar.bz2 xxx/
# 解压
tar jxvf xxx.tar.bz2
# 查看文件列表
tar -tf xxx.tar.bz2
多进程打包
apt install pigz -y
# 压缩
tar --use-compress-program=pigz -cvpf xxx.tar.gz ./*
# 解压
tar --use-compress-program=pigz -xvpf xxx.tar.gz
Python tarfile 内存加压
- 使用Python标准库中的
tarfile
模块,可以直接从内存中获取 tar
文件中的内容,而无需先解压到本地
- 示例代码
import tarfile
# 打开tar包文件
tar = tarfile.open("archive.tar.gz", "r:gz")
# 获取特定文件内容
f = tar.extractfile("path/to/file")
file_content = f.read()
# 或遍历所有文件
for member in tar.getmembers():
f = tar.extractfile(member)
# do something with file object
tar.close()
说明
- 使用
tarfile.open
打开 tar
包文件
- 调用
extractfile
方法获取文件对象
- 直接从文件对象中读入内容到变量
- 或循环获取每个成员文件的文件对象