10月8日任務bash
6.5 zip壓縮工具工具
6.6 tar打包spa
6.7 打包並壓縮3d
支持壓縮目錄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壓縮包內的文件列表,具體使用看下面的例子
壓縮目錄時不加-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在打包的同時會保留原文件。
-c 建立
-v 詳細信息
-f 後接包名
-x 解包
打包文件、目錄、文件和目錄
# 打包文件 [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
.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