在linux中對檔案夾與檔案壓縮/解壓命令一秀是用到了tar ,zip ,unzip 命令,下面我們一一舉例說明。
文法:gzip [選項] 壓縮(解壓縮)的檔案名稱該命令的各選項含義如下:
-c 將輸出寫到標準輸出上,並保留原有檔案。-d 將壓縮檔解壓。-l 對每個壓縮檔,顯示下欄欄位: 壓縮檔的大小;未壓縮檔的大小;壓縮比;未壓縮檔的名字-r 遞迴式地尋找指定目錄並壓縮其中的所有檔案或者是解壓縮。-t 測試,檢查壓縮檔是否完整。-v 對每一個壓縮和解壓的檔案,顯示檔案名稱和壓縮比。-num 用指定的數字 num 調整壓縮的速度,-1 或 --fast 表示最快壓縮方法(低壓縮比),-9 或--best表示最慢壓縮方法(高壓縮比)。系統預設值為 6。指令執行個體:
gzip *% 把目前的目錄下的每個檔案壓縮成 .gz 檔案。gzip -dv *% 把目前的目錄下每個壓縮的檔案解壓,並列出詳細的資訊。gzip -l *% 詳細顯樣本1中每個壓縮的檔案的資訊,並不解壓。gzip usr.tar% 壓縮 tar 備份檔案 usr.tar,此時壓縮檔的副檔名為.tar.gz。
1、tar
用法樣本
代碼如下 |
複製代碼 |
tar -cf test.tar test.txt 該命令會把test.txt打包為一個 test.tar 的檔案。 tar -zcf test.tar.gz test.txt 該命令會把test.txt打包並且壓縮成一個 test.tar.gz檔案。 tar -rf test.tar test2.txt 該命令會把test2.txt打包進已經存在的test.tar檔案中。 tar -tf test.tar 會列出test.tar包中的檔案。 tar -xf test.tar 會解開(有點類似解壓)test.tar檔案。 tar -zcvf test.tar.gz test.txt 和 tar -zcf test.tar.gz test.txt 類似。只不過該命令會顯示壓縮排程。 tar -zxvf test.tar.gz 會解壓檔案。 |
2、zip 命令。
一般用法: zip test.zip test.txt 該命令會自動打包並壓縮 test.txt 為 test.zip檔案。
代碼如下 |
複製代碼 |
zip -g test.zip test2.txt 該命令會把test2.txt壓縮排已經存在的test.zip中。 zip -u test.zip test.txt 會檢查test.txt是否有更新,如果檔案已經更改,則重新將test.txt壓縮排test.zip。否則不執行壓縮。 zip -d test.zip test2.txt 會將test.zip中,test2.txt刪除掉。 |
3、unzip 用來解壓zip檔案。
一般用法。zip test.zip解壓test.zip
zip test.zip *.php 將test.zip中 php檔案全部解壓出來。
-f 只解壓更新已存在的檔案,其他檔案不解壓(但更新時會一一詢問)。
-u 解壓更新已存在的檔案,並把不存在的檔案也解壓(但更新時會一一詢問)。
-fo 只解壓更新已存在的檔案,其他檔案不解壓(但不詢問直接覆蓋更新)。
-uo 解壓更新已存在的檔案,並把不存在的檔案也解壓(但不詢問直接覆蓋更新)。
-o 不論檔案是新是舊,一律從壓縮檔中解壓,並直接覆蓋。
-n 只把不存在的檔案解壓,已存在的檔案則無論新舊一律保留原狀。
-C 不計較大小寫不同,視為相同檔案名稱(預設是視為不同)。
-L 解壓時一律將檔案名稱轉為小寫。
還有,遇到有子目錄時的處理決策:
-j 不管原來壓縮時的目錄為何,均全部解開於現行目錄。
-d 後面接一個目錄名稱。可以指定解壓到該目錄。
一個其他的常用選項:
-l 只列出壓縮包裡面有哪些檔案,而不真的解開壓縮。
4、gzip 將檔案壓縮。
範例:
範例一:將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar
代碼如下 |
複製代碼 |
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==僅打包,不壓縮! [root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<==打包後,以 gzip 壓縮 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<==打包後,以 bzip2 壓縮 |
# 特別注意,在參數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識。
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~
# 如果加 j 參數,則以 .tar.bz2 來作為附檔名啊~
# 上述指令在執行的時候,會顯示一個警告訊息:
# 『tar: Removing leading `/" from member names』那是關於絕對路徑的特殊設定。
範例二:查閱上述 /tmp/etc.tar.gz 檔案內有哪些檔案?
代碼如下 |
複製代碼 |
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
|
# 由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的檔案時,
# 就得要加上 z 這個參數了!這很重要的!
範例三:將 /tmp/etc.tar.gz 檔案解壓縮在 /usr/local/src 底下
代碼如下 |
複製代碼 |
[root@linux ~]# cd /usr/local/src [root@linux src]# tar -zxvf /tmp/etc.tar.gz # 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個範例來說, # 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz , # 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc # 則會發現,該目錄下的檔案屬性與 /etc/ 可能會有所不同喔! |
範例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
代碼如下 |
複製代碼 |
[root@linux ~]# cd /tmp [root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
|
# 我可以透過 tar -ztvf 來查閱 tarfile 內的檔案名稱,如果單只要一個檔案,
# 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!
範例五:將 /etc/ 內的所有檔案備份下來,並且儲存其許可權!
代碼如下 |
複製代碼 |
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
|
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本檔案的屬性時!
範例六:在 /home 當中,比 2005/06/01 新的檔案才備份
代碼如下 |
複製代碼 |
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home |
範例七:我要備份 /home, /etc ,但不要 /home/dmtsai
代碼如下 |
複製代碼 |
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc |
範例八:將 /etc/ 打包後直接解開在 /tmp 底下,而不產生檔案!
代碼如下 |
複製代碼 |
[root@linux ~]# cd /tmp [root@linux tmp]# tar -cvf - /etc | tar -xvf -
|
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!
# 這部分我們會在 Bash shell 時,