2024-05-09    2024-05-09    1598 字  4 分钟

目前比较常见的压缩格式

*.zip | zip 程序压缩归档的,很常见,但不包含文档名的编码信息,跨平台易乱码 *.7z | 7zip 程序压缩的档案 *.rar | 商用 rar 程序压缩打包的工具,window 上很常见,商业格式 *.xz | xz 程序压缩 *.gz | gz 程序压缩 *.bz2 | bzip2 程序压缩 *.tar.xz | xz 程序压缩,并使用 tar 归档 *.tar.gz | gz 程序压缩,并使用 tar 归档 *.tar.bz2 | bzip2 程序压缩,并使用 tar 归档

可否压缩多个文件

  1. xz,gzip,bzip2 程序只可以压缩一个文档(该进程的输入输出 都是流,不包含文档树信息),想要压缩多个文档需要借助 tar 打包工具(将所要压缩的多个文档打包为一个包含文档树信息的工具)
  2. 7zip,rar,zip 程序即直接压缩多个文档

压缩算法差异

  1. gzip 使用 DEFLATE 算法,压缩比适中
  2. 7z 新一代格式,使用压缩算法可替换,默认使用 lzma/lzma2 算法,使用 AES-256 作为加密算法
  3. xz 同样使用 lzma/lzma2 算法,不过只能压缩一个文档。压缩比很高
  4. zip 同时支持多个算法,默认使用 DEFLATE 算法,存在(跨平台乱码,容易破解等问题)
  5. rar 类似 DEFLATE 算法,使用 AES 加密 rar5.0 后使用 AES-256CBC

zip 被广泛用于 apk,jar,epub 等格式中。zip 最流行,不用担心目标平台没有解压工具。

如何选择压缩工具

  1. tar.gz Linux 上目前最常用的压缩格式,在压缩率和压缩时间上有很好的平铺。如果存在疑惑,就使用该格式
  2. zip 如果该文件需要被广泛传播,推荐使用它,不担心下载文件后的平台没有解压文件,但存在文件名乱码问题
  3. rar 性能差,商业格式,但存在 recovery records 功能,在网络环境不好,导致包容易破损,可以很快恢复
  4. tar.xz 追求压缩率,建议使用它。现在电脑的性能都可以,应该会大规模使用,eg: archlinux 的安装包都是 tar.xz 格式
  5. 7z 比 zip 更适合跨平台使用。但需要自己安装对应的解压工具

总结:跨平台不用考虑接收方是否有合适的解压工具,请使用 zip, 如果有更多个可能跨平台更推荐 7z. linux 上推荐 tar.xz 格式

常用的压缩和解压命令

tar 程序

unix 上常用的文件打包工具。常用的命令

1
2
3
4
5
6
7
8
# 打包和压缩
tar [-z|-j|-J] [cv] [-f 带创建的新文件名] file1 file2...
# 查看 tar 文件内容
tar [-z|-j|-J] [tv] [-f 存在的 tar 文件]
# 解压
tar [-z|-j|-J] [xv] [-f 存在的 tar 文件] [-C 目录]
# 通用的解压方法.根据后缀名自动识别解压方法
tar -axv [-f 存在的 tar 文件] [-C 目录]

参数解释

参数含意
-c创建打包档案
-v在压缩/解压过程中显示正在处理的文件
-f filename-f 后面要立刻接被处理的档案名
-C 目录将解压后的文件存在到 ted 目录下,默认当前目录
-z使用 gzip 压缩/解压,此时 -f 目录名最好为*.tar.gz
-j使用 bzip2 压缩/解压,此时 -f 目录名最好为*.tar.bz2
-J使用 xz 压缩/解压, 此时 -f 目录名最好为*.tar.xz
-a根据-f *.tar.xx 的 xx 结果选择合适的压缩/解压工具进行操作

一些特殊用法

  1. 仅解压指定文件
1
2
3
4
# 查看当前 tar 文件存在哪些文件
tar -atv -f *.tar.xx
# 解压指定文件
tar -axv -f *.tar.xx 需要解压文件
  1. 打包某个目录,忽视某些文件
    1
    
    tar -zcv -f filename.tar.gz directory --exclude=file1 --exclude=func*
    

zip

  1. 压缩命令
1
zip -r filename.zip directory
  1. 解压命令
1
2
# 解压到 directory
unzip -d directory filename.zip

其他参数:

  • -t 测试压缩文件的完整性
  • -x filename 排除某个文件

7z

一般使用 p7zip 需要自己安装。 p7zip 不仅支持 7z,还支持 zip,cab,gzip,arj,tar,rpm,deb 等格式

  • 查看压缩文件内容, 7z l file.7z
  • 压缩文件,或向压缩包中添加文件 7z a file.7z file1 directory1
  • 解压
    • 完整目录解压 7z x file.7z -o directory -y
    • 非完整目录解压 7z e file.7z -o direcotry -y

rar

  • 压缩: rar a file.rar file . rar 命令需要自己安装
  • 解压: unrar x file.rar

比较好用的 GUI 压缩工具

linux

windos

macos

文件名乱码解决思路

windows 下 zip 文件名乱码解决思路

命令行解决思路

%E9%AB 乱码解决方法

1
2
3
4
5
6
7
8
alias urldecode='python -c "import sys, from urllib.parse as ul; print ul.unquote_plus(sys.argv[1])"'

# 遍历选择的文件列表,进行重命名
for f in "$@"
do
    newName=$(urldecode "$f")
    mv "$f" "$newName"
done

自在飞花轻似梦」 乱码解决思路

  • 这种情况下一般就是编码格式转换的问题.
  • 常见的默认编码格式:
    • macos: UTF-8-Mac
    • linux: latin1
    • windows: 根据语言的设置编码格式不一样,如果默认是中文,编码格式一般是 gbk
  • python 解决方法 从 latin1 到 gbk
1
python -c "import sys,os;fp=os.path.dirname(sys.argv[1]);fn=os.path.basename(sys.argv[1]);os.rename(sys.argv[1],os.path.join(fp,fn.encode('latin1').decode('gbk')))" %1