linux · 2020-03-31 0

Linux打包和压缩(tar、zip、gzip)

一、tar 命令

1.打包与压缩

  • -c 将多个文件或目录进行打包
  • -v 显示打包文件的过程
  • -f 文件名,指定打包的文件名
  • -z 压缩和解压.tar.gz格式,通过gzip方式压缩和解压
  • -j 压缩和解压缩.tar.bz2格式,通过bzip2方式压缩和解压
zxm@zxm-pc:~/test$ ls hello/
hello1.txt  hello2.txt  hello3.txt
zxm@zxm-pc:~/test$ tar -cvf hello.tar hello/
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt
zxm@zxm-pc:~/test$ tar -zcvf hello.tar.gz hello/
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt
zxm@zxm-pc:~/test$ tar -jcvf hello.tar.bz2 hello/
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt
zxm@zxm-pc:~/test$ ls -lh
总用量 24K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  10K 5月  26 09:20 hello.tar
-rw-rw-r-- 1 zxm zxm  177 5月  26 09:20 hello.tar.bz2
-rw-rw-r-- 1 zxm zxm  168 5月  26 09:20 hello.tar.gz

2.解打包和解压缩

  • -x 对tar包做解打包操作
  • -v 显示解打包的过程
  • -f 文件名,指定要解压的文件名
  • -z 压缩和解压缩.tar.gz格式
  • -j 压缩和解压缩.tar.bz2格式
  • -t 只查看包中有哪些文件或目录,不做解打包操作
  • -C 目录名,指定解打包位置
zxm@zxm-pc:~/test$ ls
hello.tar  hello.tar.bz2  hello.tar.gz
zxm@zxm-pc:~/test$ tar -xvf hello.tar
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt 
zxm@zxm-pc:~/test$ ls
hello  hello.tar  hello.tar.gz
zxm@zxm-pc:~/test$ rm -rf hello/
zxm@zxm-pc:~/test$ tar -zxvf hello.tar.gz 
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt
zxm@zxm-pc:~/test$ tar -zxvf hello.tar.gz 
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt
zxm@zxm-pc:~/test$ ls
hello  hello.tar  hello.tar.gz
zxm@zxm-pc:~/test$ rm -rf hello/
zxm@zxm-pc:~/test$ tar -jxvf hello.tar.bz2 
hello/
hello/hello3.txt
hello/hello1.txt
hello/hello2.txt

解压到指定目录:

tar -xvf package.tar -C test/

3.查看包内容

  • -t 列出归档内容
zxm@zxm-pc:~/test$ tar -tvf hello.tar.gz 
drwxrwxr-x zxm/zxm           0 2023-05-26 09:19 hello/
-rw-rw-r-- zxm/zxm           0 2023-05-26 09:19 hello/hello3.txt
-rw-rw-r-- zxm/zxm           0 2023-05-26 09:19 hello/hello1.txt
-rw-rw-r-- zxm/zxm           0 2023-05-26 09:19 hello/hello2.txt

二、zip 与 unzip 命令

1.zip 命令

  • -r 递归压缩目录,及将指定目录下的所有文件以及子目录全部压缩
  • -m 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中
  • -v 显示详细的压缩过程信息
  • -q 在压缩的时候不显示命令的执行过错
  • -d 从压缩文件中删除指定文件
  • -u 更新压缩文件,将新的文件或修改后的文件添加到ZIP存档中,若压缩后的文件,无该新文件,则追加压缩文件中,若有该新文件,则替换压缩文件中旧的文件
  • -f 刷新压缩文件,若压缩文件有该新文件,则替换压缩文件中旧的文件,若无该文件,则不做操作
  • -P 加密压缩
  • -e 加密压缩,输入隐藏密码
zxm@zxm-pc:~/test$ ls hello/
hello1.txt  hello2.txt  hello3.txt
zxm@zxm-pc:~/test$ zip -rv hello.zip hello/
  adding: hello/    (in=0) (out=0) (stored 0%)
  adding: hello/hello3.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello1.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello2.txt  (in=0) (out=0) (stored 0%)
total bytes=0, compressed=0 -> 0% savings

使用 -P 或 -e 指定密码

zxm@zxm-pc:~/test$ zip -rv -P1234 hello-p1.zip hello/
  adding: hello/    (in=0) (out=0) (stored 0%)
  adding: hello/hello3.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello1.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello2.txt  (in=0) (out=0) (stored 0%)
total bytes=0, compressed=36 -> 0% savings
zxm@zxm-pc:~/test$ zip -rv -e hello-p2.zip hello/
Enter password: 
Verify password: 
  adding: hello/    (in=0) (out=0) (stored 0%)
  adding: hello/hello3.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello1.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello2.txt  (in=0) (out=0) (stored 0%)
total bytes=0, compressed=36 -> 0% savings
zxm@zxm-pc:~/test$ ls -lh
总用量 8.0K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  642 5月  26 09:28 hello.zip
-rw-rw-r-- 1 zxm zxm  726 5月  26 09:28 hello.zip
-rw-rw-r-- 1 zxm zxm  726 5月  26 09:28 hello.zip

使用 -u 往压缩文件中添加新文件,使用 -d 从压缩文件中删除指定文件

zxm@zxm-pc:~/test$ zip -u hello.zip hello2/hello4.txt 
  adding: hello2/hello4.txt (stored 0%)
zxm@zxm-pc:~/test$ zip -d hello.zip hello/hello1.txt
deleting: hello/hello1.txt
zxm@zxm-pc:~/test$ unzip -t hello.zip 
Archive:  hello.zip
    testing: hello/                   OK
    testing: hello/hello3.txt         OK
    testing: hello/hello2.txt         OK
    testing: hello2/hello4.txt        OK
No errors detected in compressed data of hello.zip.

2.unzip 命令

  • -d 目录名,将压缩文件解压到指定目录下
  • -n 解压时并不覆盖已经存在的文件
  • -o 解压时覆盖已经存在的文件,并且无需用户确认
  • -v 查看压缩文件的详细信息
  • -t 测试压缩文件有无损坏,但并不解压
  • -x 文件列表,解压文件,但不包含文件列表中指定的文件
zxm@zxm-pc:~/test$ ls
hello.zip 
zxm@zxm-pc:~/test$ unzip -d zip hello.zip 
Archive:  hello.zip
   creating: zip/hello/
 extracting: zip/hello/hello3.txt
 extracting: zip/hello/hello1.txt
 extracting: zip/hello/hello2.txt
zxm@zxm-pc:~/test$ ls
hello.zip  zip
zxm@zxm-pc:~/test$ ls zip/
hello
zxm@zxm-pc:~/test$ unzip hello.zip 
Archive:  hello.zip
   creating: hello/
 extracting: hello/hello3.txt
 extracting: hello/hello1.txt
 extracting: hello/hello2.txt
zxm@zxm-pc:~/test$ ls
hello  hello.zip  zip

3.unzip 查看包内容

zxm@zxm-pc:~/test$ unzip -l hello.zip 
Archive:  hello.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2023-05-26 09:19   hello/
        0  2023-05-26 09:19   hello/hello3.txt
        0  2023-05-26 09:19   hello/hello1.txt
        0  2023-05-26 09:19   hello/hello2.txt
---------                     -------
        0                     4 files

三、gzip 与 gunzip 命令

在 Linux 中,打包和压缩是分开处理的。而 gzip 命令只会压缩,不能打包

1.gzip 命令

  • -c 将压缩数据输出到标准输出中,并保留源文件
  • -d 对压缩文件进行解压缩
  • -r 递归压缩指定目录下以及子目录下的所有文件
  • -v 对于每个压缩和解压缩的文件,显示相应的文件名和压缩
  • -l 对每一个压缩文件,显示以下字段:压缩文件的大小、未压缩文件的大小、压缩比、未压缩文件的名称
zxm@zxm-pc:~/test$ zip -rv hello.zip hello/
  adding: hello/    (in=0) (out=0) (stored 0%)
  adding: hello/hello3.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello1.txt  (in=0) (out=0) (stored 0%)
  adding: hello/hello2.txt  (in=0) (out=0) (stored 0%)
total bytes=0, compressed=0 -> 0% savings
zxm@zxm-pc:~/test$ ls -lh
总用量 8.0K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  642 5月  26 09:30 hello.zip
zxm@zxm-pc:~/test1$ gzip hello.zip
zxm@zxm-pc:~/test1$ ls -lh
总用量 8.0K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  201 5月  26 09:31 hello.zip.gz

在使用 gzip 命令压缩文件时,源文件会消失,从而生成压缩文件

2.gunzip 命令

gunzip 是个使用广泛的解压缩程序,它用于解开被 gzip 压缩过的文件,这些压缩文件预设最后的扩展名为 .gz。事实上 gunzip 就是 gzip 的硬连接,因此不论是压缩或解压缩,都可通过 gzip 指令单独完成。

  • -r:递归地解压缩指定目录下的所有文件
zxm@zxm-pc:~/test$ ls -lh
总用量 8.0K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  201 5月  26 09:31 hello.zip.gz
zxm@zxm-pc:~/test$ gunzip hello.zip.gz
zxm@zxm-pc:~/test$ ls -lh
总用量 8.0K
drwxrwxr-x 2 zxm zxm 4.0K 5月  26 09:19 hello
-rw-rw-r-- 1 zxm zxm  642 5月  26 09:31 hello.zip