zip壓縮和tar打包工具

10月8日任務bash

6.5 zip壓縮工具工具

6.6 tar打包spa

6.7 打包並壓縮3d

 

 

zip壓縮工具

支持壓縮目錄code

zip工具默認未安裝,使用下面的命令進行安裝ip

 

yum install -y zip unzipclass

 

zip壓縮文件的同時保留原文件(更gzip等不一樣),所以在解壓縮時會提示是否覆蓋原文件.test

  • 基本使用擴展

# 壓縮
[root@localhost tmp]# zip 1.txt.zip 1.txt
  adding: 1.txt (deflated 63%)
[root@localhost tmp]# ls -l 1.txt*
-rw-r--r--. 1 root root 25865478 ... 1.txt
-rw-r--r--. 1 root root  9649872 ... 1.txt.zip

# 解壓縮
[root@localhost tmp]# unzip 1.txt.zip
Archive:  1.txt.zip
replace 1.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: r
new name: 2.txt
  inflating: 2.txt                   
[root@localhost tmp]# ls -l
總用量 77036
-rw-r--r--. 1 root root 25865478 ... 1.txt
-rw-r--r--. 1 root root  9649872 ... 1.txt.zip
-rw-r--r--. 1 root root 25865478 ... 2.txt
  • 目錄的壓縮打包

不一樣於gzip、bzip二、xz,zip工具支持對目錄的壓縮

 

默認不加-r參數的zip dir1.zip dir1/ 只會對dir1目錄內一級內容壓縮,若是dir1目錄內有子目錄,子目錄內的文件並不會被壓縮!!

要想壓縮整個dir1目錄包括其子目錄內的全部文件,須要加上 -r參數!具體以下面的幾個例子。

 

實驗目錄結構

[root@localhost tmp]# tree dir1
dir1
├── 1.txt
└── dir2
    └── 2.txt.xz

1 directory, 2 files

-l參數能夠顯示zip壓縮包內的文件列表,具體使用看下面的例子

  1. 壓縮目錄時不加-r參數,默認只壓縮目錄自己即一個空目錄

[root@localhost tmp]# zip dir1.zip dir1/
  adding: dir1/ (stored 0%)
[root@localhost tmp]# unzip -l dir1.zip
Archive:  dir1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  ...		21:13   dir1/
---------                     -------
        0                     1 file

    2. 加上-r參數壓縮目錄

[root@localhost tmp]# zip -r dir2.zip dir1/
  adding: dir1/ (stored 0%)
  adding: dir1/1.txt (deflated 63%)
  adding: dir1/dir2/ (stored 0%)
  adding: dir1/dir2/2.txt.xz (deflated 0%)

[root@localhost tmp]# unzip -l dir2.zip
Archive:  dir2.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  ...         21:13   dir1/
25865478  ...         21:11   dir1/1.txt
        0  ...        21:12   dir1/dir2/
  7845588  ...        21:12   dir1/dir2/2.txt.xz
---------                     -------
33711066                     4 files
  • 解壓文件至指定目錄
[root@localhost tmp]# unzip 1.txt.zip -d ./dir1/dir2/
Archive:  1.txt.zip
  inflating: ./dir1/dir2/1.txt       
[root@localhost tmp]# tree dir1
dir1
├── 1.txt
└── dir2
    ├── 1.txt
    └── 2.txt.xz

1 directory, 3 files

壓縮包內的文件名在解壓縮時不會改變,也沒法在解壓時重命名。

zip壓縮較以前的幾個壓縮工具而言較爲寬鬆,壓縮率不高。

 

tar打包/壓縮工具

打包的目的是爲了加快文件的傳輸速率,節約時間。一樣的tar在打包的同時會保留原文件

經常使用參數

  • -c 建立

  • -v 詳細信息

  • -f 後接包名

  • -x 解包

  1. 打包文件、目錄、文件和目錄

# 打包文件
[root@localhost tmp]# tar -cvf 1.txt.tar 1.txt
1.txt
[root@localhost tmp]# ls -l
總用量 50532
-rw-r--r--. 1 root root 25865478 ... 1.txt
-rw-r--r--. 1 root root 25876480 ... 1.txt.tar
drwxr-xr-x. 3 root root       ... dir1

# 打包文件和目錄
[root@localhost tmp]# tar -cvf test.tar 1.txt dir1/
1.txt
dir1/
dir1/1.txt
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt
[root@localhost tmp]# ls -l
總用量 133984
-rw-r--r--. 1 root root 25865478 ... 1.txt
-rw-r--r--. 1 root root 25876480 ... 1.txt.tar
drwxr-xr-x. 3 root root       31 ... dir1
-rw-r--r--. 1 root root 85452800 ... test.tar

    2. 解包,直接覆蓋原目錄、文件(不會提示)

[root@localhost tmp]# tar -xvf 1.txt.tar
1.txt
[root@localhost tmp]# ls -l
總用量 133984
-rw-r--r--. 1 root root 25865478 ... 21:32 1.txt
-rw-r--r--. 1 root root 25876480 ... 21:32 1.txt.tar
drwxr-xr-x. 3 root root       31 ... 21:13 dir1
-rw-r--r--. 1 root root 85452800 ... 21:33 test.tar

    3. 查看壓縮包內文件列表

# tar -tf test.tar
[root@localhost tmp]# tar -tf test.tar
1.txt
dir1/
dir1/1.txt
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt

    4. 打包除file1等文件或目錄外的目錄(過濾文件)

# --exclude後接匹配項
[root@localhost tmp]# man tar
...
--exclude=PATTERN
              exclude files, given as a PATTERN
...
# 2種寫法
# --exclude參數在要打包的目錄以後
[root@localhost tmp]# tar -cvf dir3.tar dir1/ --exclude="*.xz"
dir1/
dir1/1.txt
dir1/dir2/
dir1/dir2/1.txt

# --exclude參數在要打包的目錄以前
[root@localhost tmp]# tar -cvf dir2.tar --exclude="*.xz" dir1/
dir1/
dir1/1.txt
dir1/dir2/
dir1/dir2/1.txt

tar打包時壓縮/解壓縮

  1. .gz文件:-z參數

[root@localhost tar]# tar -zcvf dir1.tar.gz ../dir1/
tar: 從成員名中刪除開頭的「../」
../dir1/
../dir1/dir2/
../dir1/dir2/2.txt.xz
../dir1/dir2/1.txt
../dir1/1.txt
[root@localhost tar]# ls -lh
總用量 26M
-rw-r--r--. 1 root root 26M ... 15:08 dir1.tar.gz

# 解壓縮,直接覆蓋同名文件,不詢問
[root@localhost tar]# tar -zxvf dir1.tar.gz
dir1/
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt
dir1/1.txt
[root@localhost tar]# ls -lh
總用量 26M
drwxr-xr-x. 3 root root  31 ... 21:13 dir1
-rw-r--r--. 1 root root 26M ... 15:08 dir1.tar.gz

    2. .bz2文件:-j參數

# 打包並壓縮
[root@localhost tar]# tar -jcvf dir.tar.bz2 ../dir1/
tar: 從成員名中刪除開頭的「../」
../dir1/
../dir1/dir2/
../dir1/dir2/2.txt.xz
../dir1/dir2/1.txt
../dir1/1.txt
[root@localhost tar]# ls -lh
總用量 24M
-rw-r--r--. 1 root root 24M ... 15:10 dir.tar.bz2

# 解包解壓縮
[root@localhost tar]# tar -jxvf dir.tar.bz2
dir1/
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt
dir1/1.txt
[root@localhost tar]# ls -lh
總用量 24M
drwxr-xr-x. 3 root root  31 ... 21:13 dir1
-rw-r--r--. 1 root root 24M ... 15:10 dir.tar.bz2

    3. .xz文件:-J參數

# 打包壓縮爲.xz文件
[root@localhost tar]# tar -Jcvf dir1.tar.xz ../dir1/
tar: 從成員名中刪除開頭的「../」
../dir1/
../dir1/dir2/
../dir1/dir2/2.txt.xz
../dir1/dir2/1.txt
../dir1/1.txt
[root@localhost tar]# ls -lh
總用量 22M
-rw-r--r--. 1 root root 22M ... 15:12 dir1.tar.xz

# 解壓
[root@localhost tar]# tar -Jxvf dir1.tar.xz
dir1/
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt
dir1/1.txt
[root@localhost tar]# ls -lh
總用量 22M
drwxr-xr-x. 3 root root  31 ... 21:13 dir1
-rw-r--r--. 1 root root 22M ... 15:12 dir1.tar.xz

    4. 查看包內文件列表:-tf參數

[root@localhost tar]# tar -tf dir1.tar.xz
dir1/
dir1/dir2/
dir1/dir2/2.txt.xz
dir1/dir2/1.txt
dir1/1.txt

擴展:

tar命令自己沒法選擇壓縮級別,在某些狀況下能夠經過先壓縮再打包的方式來實現指定級別的壓縮!

# 先按指定級別進行壓縮
[root@localhost tar]# gzip -9 ../dir1/1.txt

# 打包已壓縮的文件
[root@localhost tar]# tar -cvf 1.tar.gz ../dir1/1.txt.gz
tar: 從成員名中刪除開頭的「../」
../dir1/1.txt.gz
[root@localhost tar]# ls -lh
總用量 9.2M
-rw-r--r--. 1 root root 9.2M ... 15:19 1.tar.gz
相關文章
相關標籤/搜索