linux常用命令之zip/unzip命令(壓縮文件/解壓縮文件)詳解
前言
本文主要講解在Linux上怎么將文件壓縮成zip包,及解壓縮zip包。
zip命令 可以用來解壓縮文件,或者對文件進行打包操作。zip是個使用廣泛的壓縮程序,文件經(jīng)它壓縮后會另外產(chǎn)生具有“.zip”擴展名的壓縮文件。
通過 zip 命令可以將文件打包成.zip格式的壓縮包,里面會附含文件的名稱、路徑、創(chuàng)建時間、上次修改時間等等信息,與 tar 命令相似。
一、linux安裝zip文件
1.查看是否安裝壓縮/解壓zip軟件包
yum list installed | grep zip
2.輸入以下命令來安裝zip/unzip軟件
以下兩種方式任選其一:
方式一: sudo apt-get install zip unzip 方式二: yum -y install zip unzip
3.擴展命令 安裝 卸載 更新
命令1:yum -y install [關(guān)鍵詞] 命令2:yum -y remove [關(guān)鍵詞] 命令3:yum -y update [關(guān)鍵詞]
二、zip語法
- 該命令的語法如下:
zip [選項] 壓縮包名 源文件或源目錄列表
- 常用命令選項
-a, --ascii將文件轉(zhuǎn)換為 ASCII 格式 -A, --adjust-sfx調(diào)整自解壓可執(zhí)行歸檔文件。通過將 SFX 存根添加到現(xiàn)有存檔中首部,可以創(chuàng)建自解壓縮的可執(zhí)行存檔 -b, --temp-path PATH指定暫時 zip 文件的目錄 -c, --entry-comments為每一個被壓縮的文件加上一行注釋說明 -d, --delete刪除壓縮文件內(nèi)指定的文件。例如 zip -d foo foo/tom/junk foo/harry/\* \*.o,將移除文件 foo/tom/junk以及所有以 foo/harry/ 開頭的文件以及后綴為 .o 的文件 -db, --display-bytes顯示已處理的字節(jié)和剩余的字節(jié) -dc, --display-counts顯示已壓縮的條目數(shù)和剩余條目數(shù) -dd, --display-dots壓縮每個條目時顯示進度條。進度條使用點表示,默認每個點表示壓縮了 10MB -dg, --display-globaldots顯示整體壓縮的進度條,而不是每個文件的進度條。默認每個點表示壓縮了 10MB -ds, --dot-size SIZE設(shè)置進度條中每個點表示已處理的文件大小,默認為 10MB。如果設(shè)置為 0 表示關(guān)閉進度條 -du, --display-usize顯示每個條目未壓縮的大小 -dv, --display-volume顯示每個條目的卷(磁盤)號 -D, --no-dir-entries忽略目錄 -DF, --difference-archive增量壓縮,即壓縮新增或更新的文件到舊的壓縮歸檔中。應(yīng)該從運行原始 zip 命令的相同目錄運行,因為存儲在 zip 歸檔中的文件路徑信息會被保留 -e, --encrypt壓縮時進行加密,輸入的密碼不會被打印出來 -f, --freshen增量壓縮,只壓縮更新的文件。應(yīng)該從運行原始 zip 命令的相同目錄運行,因為存儲在 zip 歸檔中的文件路徑信息會被保留 -F, --fix, -FF, --fixfix修復(fù)已損失的壓縮文件。如果壓縮文件的某些部分丟失,則可以使用 -F 選項來修復(fù),但需要一個相當完整的中心目錄。如果壓縮文件損壞嚴重或者被截斷,則需要 -FF 來修復(fù) -FS, --filesync將存檔的內(nèi)容與操作系統(tǒng)上的文件進行同步。如果歸檔中的條目與操作系統(tǒng)上的文件不匹配,則刪除該條目 -g, --grow向已存在的 zip 歸檔文件追加內(nèi)容。如果此操作失敗,zip 將嘗試還原存檔文件到其原始狀態(tài)。如果恢復(fù)失敗,則存檔文件可能會被損壞 -h, -?, --help相識幫助信息并退出。當 zip 無參數(shù)運行時,等同于使用該選項,顯示幫助信息 -h2, --more-help顯示擴展的幫助信息,包括更多關(guān)于命令行格式、模式匹配和更多少用的選項 -i, --include FILES指定被壓縮的文件 -j, --junk-paths不保留被壓縮的文件的目錄信息,只保留文件名 -J, --junk-sfx從存檔中刪除所有前置追加的數(shù)據(jù)(例如 SFX 存根) -k, --DOS-names嘗試轉(zhuǎn)換名稱和路徑以符合 MSDOS,只存儲 MSDOS 屬性將條目標記為 MSDOS 下的條目 -l, --to-crlf將 Unix 的行尾字符 LF 轉(zhuǎn)換成 MSDOS 約定的 CR LF。此選項不應(yīng)用于二進制文件 la, --log-append附加到現(xiàn)有日志文件。默認是覆蓋 -lf, --logfile-path LOGFILEPATH打開指定的日志文件 -li, --log-info在日志中包含更多信息,例如被壓縮的文件名。默認情況下只包含命令行、警告和錯誤以及最終狀態(tài) -ll, --from-crlf作用于 -l 選項相反。將 MSDOS 的結(jié)束行 CR LF 轉(zhuǎn)換為 Unix 的 LF。此選項不應(yīng)用于二進制文件 -L, --license顯示 zip 許可證 -m, --move將指定的文件移動到 zip 歸檔文件中。目標文件會被刪除,如果目標文件所在的目錄變成空目錄,也會被刪除 -MM, --must-match所有輸入的模式至少匹配一個文件,且所有輸入的文件必須可讀,否則 zip 將返回 OPEN 錯誤并退出 -n, --suffixes SUFFIXES不要嘗試壓縮指定后綴的文件。這些文件只是簡單地存儲在輸出 zip 中(0%壓縮) -nw, --no-wild不執(zhí)行內(nèi)部通配符的處理。注意 Shell 仍然會執(zhí)行通配符的處理,除非對通配符使用了轉(zhuǎn)義 -o, --latest-time將 zip 文件的最后修改時間更改為其所有條目中最近修改時間中最近的時間 -O, --output-file OUTPUT-FILE不更改現(xiàn)有 zip 文件,指定新輸出的 zip 文件 -p, --paths在 zip 文件中存儲文件的路徑信息。該選項為默認選項,可以使用 -j 選項只存儲文件名 -P, --password PASSWORD使用指定密碼加密 zip 中的條目。注意,該操作不安全,因為密碼可能會被其他用戶通過查看歷史命令窺探到,安全的做法是通過交互式輸入不可打印的密碼完成加密 -q, --quiet靜默模式。消除各種消息和提示 -r, --recurse-paths遞歸壓縮指定目錄 -R, --recurse-patterns遞歸遍歷當前目錄 -s, --split-size SPLITSIZE指定 zip 歸檔文件被拆分的大小 -sb, --split-bellzip 暫停分隔歸檔文件時響鈴提示 -sc, --show-command在 zip 啟動和結(jié)束時,顯示命令行 -sf, --show-files顯示將要操作的文件,然后退出。例如,如果創(chuàng)建一個新的存檔,它將列出將要添加的文件。如果該選項后跟 -,即 -sf-,僅輸出到打開的日志文件。對于大列表,不建議使用屏幕顯示 -so, --show-options顯示 zip 所有可用的選項 -sp, --split-pause如果使用 -s 啟用分割,則啟用分割暫停模式 -su, --show-unicode類似于選項 -sf,但是如果存在 Unicode 版本的路徑則顯示 -sU, --show-just-unicode如果存在,只顯示 Unicode 版本的路徑,否則顯示該路徑的標準版本 -sv, --split-verbose輸出拆分時的各種詳細消息,顯示如何進行拆分 -t, --from-date MMDDYYYY不對最后修改時間早于指定日期的文件進行操作。其中 MM 表示月(00-12),DD 表示每個月的日(01-31),YYYY 表示年 -T, --test檢查新 zip 文件的完整性,如果檢查失敗,那么舊的 zip 文件不會被改變,且輸入的文件不會被刪除(如果使用 -m 選項) -TT, --unzip-command CMD當使用選項 -T 時,使用指定的命令對 zip 歸檔文件進行檢測,而不是使用默認的命令 unzip -tqq -u, --update更新 zip 歸檔文件中被更新的條目 -U, --copy-entries將條目從一個 zip 存檔復(fù)制到另一個存檔。需要 --out 選項來指定與輸入存檔不同的輸出文件 -UN, --unicode V確定 zip 如何處理 Unicode 文件名。V 可取值有:q 如果路徑不匹配,則退出;w 警告,繼續(xù)使用標準路徑;i 忽略 繼續(xù)使用標準路徑;n 不使用 Unicode 路徑 -v, --verbose詳細模式或打印診斷與版本信息 -ws, --wild-stop-dirs通配符 * 只用于替換文件而不包含目錄。如 /foo/bar/* 只會匹配 /foo/bar/file2.c,不會匹配 /foo/bar/dir/file1.c -x, --exclude FILES顯式排除指定的文件,如 zip -r foo foo -x \*.o,將排除目錄 foo 下所有以 .o 結(jié)尾的文件。注意,星號需要轉(zhuǎn)義,以免被 Shell 替換 -X, --no-extra不保存額外的文件屬性 -y, --symlinks壓縮存儲符號鏈接本身而不是目標文件 -z, --archive-comment提示為整個 zip 歸檔文件輸入多行注釋。注釋以僅包含一個點號的行結(jié)束或者輸入 ^D。也可以從文件中獲取注釋,如 zip -z foo < foowhat -Z, --compression-method CM設(shè)置默認的壓縮算法。目前 zip 支持的主要算法是 store、deflate 和 bzip2 -#(-0, -1, -2, -3, -4, -5, -6, -7, -8, -9)使用指定的數(shù)字 # 調(diào)節(jié)壓縮速度,其中 -0 表 示沒有壓縮,僅打包所有文件;-1 表示最快的壓縮速度,壓縮率較低;-9表示最慢的壓縮速度,最佳的壓縮效果;默認壓縮級別為 -6 -@, --names-stdin從標準輸入獲取輸入文件列表,每行一個文件
2.1、常用選項實例
結(jié)合實例講解以下常用到的選項
選項 | 作用 |
---|---|
-r | 遞歸地將一個目錄及其所有子目錄和文件壓縮到ZIP文件中 |
-q | 在壓縮文件時啟用靜默模式,即不顯示壓縮過程的詳細信息 |
-d | 從現(xiàn)有的ZIP文件中刪除指定的文件或目錄 |
-u | 用于更新現(xiàn)有的ZIP文件,將新的文件或修改后的文件添加到ZIP存檔中 |
-f | 用于刷新(更新)現(xiàn)有ZIP文件中的指定文件。 |
-m | 用于移動(歸檔)文件到一個ZIP壓縮文件中,并在移動后將源文件刪除。 |
-e | 用于對ZIP壓縮文件進行加密。 |
-z | 為壓縮文件添加注釋 |
2.1.1、-r (壓縮文件夾,解決80%的場景)
注意: 上面列舉的常用命令選項很多,若只是想要一個命令能壓縮即可,那么zip -r 壓縮包名.zip 文件1 文件2 文件n
這個命令就可以滿足你的需求了。
例如:想將以下層級結(jié)構(gòu)的文件壓縮為zip包
/home/test └─a.txt └─b.log └─test01 └─c.txt
場景一:壓縮多個文件(最常用的命令,解決80%的場景)
如想把a.txt、b.log打包進zip文件中 ,進入/home/test目錄后執(zhí)行zip -r test.zip a.txt b.log 。壓縮包內(nèi)默認不包含當前目錄
[root@centos test]# pwd /home/test [root@centos test]# ll 總用量 8 -rw-r--r--. 1 root root 11 9月 11 23:32 a.txt -rw-r--r--. 1 root root 23 9月 11 23:56 b.log drwxr-xr-x. 2 root root 19 9月 14 15:55 test01 [root@centos test]# zip -r test.zip a.txt b.log adding: a.txt (stored 0%) adding: b.log (deflated 74%) [root@centos test]#
輸出中 deflated 74% 表示壓縮率為 74%,即壓縮后的文件大小是原文件的 26%。
場景二:壓縮所有文件,并保留層級結(jié)構(gòu)
將/home/test目錄下的文件壓縮成zip包,并將zip包存放在/home目錄下,且zip包中保留目錄層級結(jié)構(gòu)
執(zhí)行命令 zip -r /home/test.zip /home/test
[root@centos test]# zip -r /home/test.zip /home/test adding: home/test/ (stored 0%) adding: home/test/a.txt (stored 0%) adding: home/test/b.log (deflated 74%) adding: home/test/test01/ (stored 0%) adding: home/test/test01/c.txt (deflated 80%)
場景三:壓縮所有文件,層級結(jié)構(gòu)從test開始
進入home目錄下后,然后執(zhí)行命令 zip -r test.zip test
[root@centos home]# pwd /home [root@centos home]# ll 總用量 8 drwxr-xr-x. 3 root root 46 9月 14 15:38 test [root@centos home]# zip -r test.zip test adding: test/ (stored 0%) adding: test/a.txt (stored 0%) adding: test/b.log (deflated 74%) adding: test/test01/ (stored 0%) adding: test/test01/c.txt (deflated 80%) [root@centos home]#
場景四:壓縮指定類型的文件
壓縮當前目錄下所有.txt結(jié)尾的文件
[root@centos test]# ll 總用量 8 -rw-r--r--. 1 root root 11 9月 11 23:32 a.txt -rw-r--r--. 1 root root 23 9月 11 23:56 b.log drwxr-xr-x. 2 root root 19 9月 14 15:55 test01 [root@centos test]# zip -r test.zip *.txt adding: a.txt (stored 0%) [root@centos test]#
場景五:壓縮文件并排除指定文件
壓縮test目錄下的文件,排除test01目錄 -x 指定排除目錄,注意沒有雙引號將不起作用。
[root@centos test]# zip -r test.zip /home/test -x "/home/test/test01/*" adding: home/test/ (stored 0%) adding: home/test/a.txt (stored 0%) adding: home/test/b.log (deflated 74%) [root@centos test]# zip -r test.zip /home/test -x /home/test/test01/* adding: home/test/ (stored 0%) adding: home/test/a.txt (stored 0%) adding: home/test/test01/ (stored 0%) adding: home/test/b.log (deflated 74%) [root@centos test]#
注意:-x排除目錄需要加上雙引號,若不加雙引號,會把空文件夾打包進來,如上面的日志
場景六:壓縮文件并忽略指定文件
與上面的-x參數(shù)功能相似
[root@centos test]# zip -r test.zip /home/test --exclude "/home/test/test01/*" updating: home/test/ (stored 0%) updating: home/test/a.txt (stored 0%) updating: home/test/b.log (deflated 74%)
2.1.2、-q
- -q選項:壓縮文件時不顯示壓縮過程的詳細信息。
[root@centos test]# zip -r test.zip a.txt b.log test01 adding: a.txt (stored 0%) adding: b.log (deflated 74%) adding: test01/ (stored 0%) adding: test01/c.txt (deflated 80%) [root@centos test]# zip -q -r test.zip a.txt b.log test01 [root@centos test]#
可以看到,當添加-q選項后,就不打印壓縮日志了。
2.1.3、-d(從壓縮文件中刪除指定文件)
- -d選項:(d是delete的縮寫)從現(xiàn)有的ZIP文件中刪除指定的文件或目錄,可以從ZIP存檔中刪除不需要的文件或目錄。
[root@centos test]# zip -d test.zip /home/test/a.txt deleting: home/test/a.txt [root@centos test]#
2.1.4、-u(更新文件)
- -u選項:用于更新現(xiàn)有的ZIP文件,將新的文件或修改后的文件添加到ZIP存檔中。
- 語法:zip -u <壓縮文件名> <目錄/文件>
- 示例:zip -u test.zip t3.txt
- 解釋:如果test.zip壓縮文件中沒有t3.txt,則test.zip中會增加新文件t3.txt;如果有t3.txt,則會替換test.zip壓縮文件中的舊t3.txt為新的t3.txt。
2.1.5、-f
- -f選項:用于刷新(更新)現(xiàn)有ZIP文件中的指定文件。
- 語法:zip -f <壓縮文件名> <要刷新(更新)的文件>
- 示例:zip -f test.zip t3.txt。
解釋:
- 更新test.zip壓縮文件中的t3.txt文件,如果test.zip壓縮文件存在該文件則會更新此文件;
- 如果不存在則不會執(zhí)行任何操作(即命令為無效命令)。
需要注意的是:
- 使用-f選項僅更新ZIP文件中指定文件,而不會添加新文件或刪除文件。如果在ZIP文件中不存在要刷新(更新)的文件,則該選項不會執(zhí)行任何操作。
- 這里我們要對zip -f和zip -u之間的區(qū)別,二者都是用于更新現(xiàn)有的ZIP文件,但它們的行為略有不同。
不同點如下:
- zip -f:只更新已存在于ZIP文件中的文件,不會添加新文件。不會添加、不會添加、不會添加(重要的事情說三遍)。
- zip -u:可以添加新文件并更新已存在的文件。
2.1.6、-m
- -m選項:用于移動(歸檔)文件到一個ZIP壓縮文件中,并在移動后將源文件刪除。
[root@centos test]# ls a.txt b.log test01 [root@centos test]# zip -m test.zip a.txt b.log adding: a.txt (stored 0%) adding: b.log (deflated 74%) [root@centos test]# ls test01 test.zip [root@centos test]#
2.1.7、-e(加密)
- -e選項:用于對ZIP文件進行加密。
- 示例:zip -e test.zip a.txt b.log
- 解釋:壓縮a.txt和b.log到壓縮文件test.zip中,并將其保存為加密的ZIP文件。
2.1.8、-z(添加注釋)
- -z選項:為壓縮文件添加注釋。
- 命令格式:zip -z <添加注釋的壓縮文件>
注意:按回車可以繼續(xù)輸入,直到某一行單獨出行了英文的.才會結(jié)束,如上圖,注釋后面有.但是沒結(jié)束,直到單獨輸入了.之后才結(jié)束的
三、unzip解壓文件
- 該命令的語法如下:
unzip [選項] 壓縮包名 源文件或源目錄列表
- 常用命令選項:
參 數(shù): -c 將解壓縮的結(jié)果顯示到屏幕上,并對字符做適當?shù)霓D(zhuǎn)換。 -f 更新現(xiàn)有的文件。 -l 顯示壓縮文件內(nèi)所包含的文件。 -p 與-c參數(shù)類似,會將解壓縮的結(jié)果顯示到屏幕上,但不會執(zhí)行任何的轉(zhuǎn)換。 -t 檢查壓縮文件是否正確。 -u 與-f參數(shù)類似,但是除了更新現(xiàn)有的文件外,也會將壓縮文件中的其他文件解壓縮到目錄中。 -v 執(zhí)行是時顯示詳細的信息。 -z 僅顯示壓縮文件的備注文字。 -a 對文本文件進行必要的字符轉(zhuǎn)換。 -b 不要對文本文件進行字符轉(zhuǎn)換。 -C 壓縮文件中的文件名稱區(qū)分大小寫。 -j 不處理壓縮文件中原有的目錄路徑。 -L 將壓縮文件中的全部文件名改為小寫。 -M 將輸出結(jié)果送到more程序處理。 -n 解壓縮時不要覆蓋原有的文件。 -o 不必先詢問用戶,unzip執(zhí)行后覆蓋原有文件。 -P<密碼> 使用zip的密碼選項。 -q 執(zhí)行時不顯示任何信息。 -s 將文件名中的空白字符轉(zhuǎn)換為底線字符。 -V 保留VMS的文件版本信息。 -X 解壓縮時同時回存文件原來的UID/GID。 -d<目錄> 指定文件解壓縮后所要存儲的目錄。 -x<文件> 指定不要處理.zip壓縮文件中的哪些文件。 -Z unzip -Z等于執(zhí)行zipinfo指令 unzip *.zip -d /目錄
3.1、解壓縮文件實例
場景一 :解壓到指定目錄
將/home下面的test.zip解壓到/home/demo目錄下
unzip /home/test.zip -d /home/demo
場景二:查看壓縮包中的文件
unzip -l 命令只查看不解壓。
[root@centos test]# unzip -l test.zip Archive: test.zip Length Date Time Name --------- ---------- ----- ---- 0 09-14-2023 17:15 home/test/ 11 09-11-2023 23:32 home/test/a.txt 0 09-14-2023 15:55 home/test/test01/ 30 09-11-2023 23:57 home/test/test01/c.txt 23 09-11-2023 23:56 home/test/b.log --------- ------- 64 5 files [root@centos test]#
四、常見問題
4.1、CentOS7中命令找不到
-Bash: Unzip: Command Not Found
解決方法
# 安裝zip /unzip yum install -y unzip zip
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux系統(tǒng)安裝Tomcat并配置Service啟動關(guān)閉
這篇文章主要介紹了Linux系統(tǒng)安裝Tomcat并配置Service啟動關(guān)閉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09如何利用Bash腳本監(jiān)控Linux的內(nèi)存使用情況
這篇文章主要給大家介紹了關(guān)于如何利用Bash腳本監(jiān)控Linux的內(nèi)存使用情況的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用linux具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06Apache?Flink?如何保證?Exactly-Once?語義(其原理分析示例)
Apache?Flink?是一個流處理和批處理的開源平臺,它提供了豐富的語義保證,其中之一就是?Exactly-Once?語義,本文將深入探討?Flink?是如何保證?Exactly-Once?語義的,包括其原理分析和相關(guān)示例,感興趣的朋友跟隨小編一起看看吧2024-06-06