- Date : [[2022-04-13_Wed]]
- 微信公众号 : 北野茶缸子
- Tags : #linux/index/01 ``
前言
总是不记得shell 的文件打包命令,总结一下。
1-zip
zip 后缀内容并不压缩,而仅仅是将文件进行打包。
有如下参数:
代码语言:javascript复制-r # 参数表示递归打包包含子目录的全部内容,
-q # 参数表示为安静模式,即不向屏幕输出信息,
-o,# 表示输出文件,需在其后紧跟打包输出文件名。
将目录全部打包:
代码语言:javascript复制zip -r -q -o test.zip /home/test/Desktop
zip 同样可以设定压缩,1 表示最快压缩但体积大,9 表示体积最小但耗时最久。
代码语言:javascript复制$ zip -r -9 -q -o test_9.zip /home/test/Desktop -x ~/*.zip
$ zip -r -1 -q -o test_1.zip /home/test/Desktop -x ~/*.zip
其中,-x 参数表示打包时排除某些文件。
需要注意,使用zip 打包必须使用绝对路径。
zip 还有一些进阶用法。
1.1-进阶用法
- 加密
zip -r -q -o -e test.zip /home/yzpeng/test/test*
Enter password:
Verify password:
下次解压,就需要输入压缩时设定的密码。
- 文本显示问题
由于换行符(为不可见字符),在 Windows 为 CR LF(Carriage-Return Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行)。因此在linux 编辑的文本,在windows 显示会是没有换行的。
我们可以利用zip -l参数使zip 压缩后的文件在win 上解压后不会存在换行的问题:
代码语言:javascript复制$ zip -r -l -o test.zip /home/test/Desktop
1.2-解压
使用 unzip 对文件解压。可以直接在当前目录解压,或指定某个目录,如果目录不存在,则会创建。
代码语言:javascript复制$ unzip -q shiyanlou.zip -d ziptest
参数-l 不会解压,只会输出zip 中的文件。
- 中文解压
通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。
通过-O 参数指定解压使用的编码格式:
代码语言:javascript复制unzip -O GBK 中文文件.zip
2-gz
gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为“.gz”。gzip 有以下参数选项:
gzip 只会压缩文件,并不会打包文件到目录,因此如果指定目录,gzip 会递归的压缩目录下的文件。
代码语言:javascript复制gzip -d SRR1039510_1.fastq.gz
参考:详解pigz使用方法-良许Linux教程网[1]还有有个多线程的gzip 工具,pigz,常用参数如下:
代码语言:javascript复制-p n: 压缩时使用的核心数量,默认使用所有核心
-k: 压缩后保留源文件
-l: 列出压缩输入的内容。
-6: 默认的压缩级别
-9: 压缩率最高,但是速度慢
-1: 压缩率最低,速度最快
我们可以利用管道符号,将gz 压缩的打包文件进行拆分,使用pigz 进一步提升效率。
3-tar
命令如下:
代码语言:javascript复制-c 建立备份
-C 指定解压后的目录
-f 指定压缩后创建的文件名
-v 可视化输出打包的文件
只进行打包:
代码语言:javascript复制tar -cvf tar.tar test*
tar 还可以将tar 格式文件压缩成包括gz 格式在内的压缩文件,参数如下:
代码语言:javascript复制-x 解压缩
-t 只查看压缩包内容
# 文件的压缩
-z gz 压缩
-j bz2 压缩
-J xz 压缩
比如:
代码语言:javascript复制# 以gz 形式压缩
$ tar -zcvf read.tar.gz readme.txt
# 解压到work 目录
$ tar -zxvf read.tar.gz -C work
4-dtrx
参考:dtrx: 懒人的存档提取之道 · LinuxTOY[2]可谓是懒人的打包、压缩文档提取救星工具。
pip install dtrx
。
其支持多种格式:
代码语言:javascript复制$ dtrx --list-extensions | paste - - - -
7z Z arj br
bz2 cab cpio deb
dmg epub gem gz
hdr jar lha lrz
lz lzh lzma msi
rar rpm tar tar.Z
tar.bz2 tar.gz tar.lrz tar.lz
tar.lzma tar.xz tar.zst taz
tb2 tbz tbz2 tgz
tlz txz xpi xz
zip zst zstd
dtrx 的重要选项包括:
- -l:列出存档中的文件
- -r:递归提取存档文件
- -m:提取元数据(如 deb)
- -o:覆写模式
- -f:将所有文件提取到当前目录
自动识别压缩文件类型,并解压:
代码语言:javascript复制dtrx lsd-0.22.0-x86_64-unknown-linux-gnu.tar.gz
这回真的要把tar -zxvf
忘了吗?
总结一下
- zip 格式,既可以压缩,又可以打包,使用zip 命令;
- tar 格式只能打包,通常会和gz 或bz2 联动,tar命令也可以压缩打包文件到这两种类型;
- gz,使用pigz 处理,多线程;
- dtrx,所有加压相关操作都用它。
参考资料
[1]
详解pigz使用方法-良许Linux教程网: https://www.lxlinux.net/4877.html
[2]
dtrx: 懒人的存档提取之道 · LinuxTOY: https://linuxtoy.org/archives/dtrx.html