打包 壓縮 命令tar zip


tar語法

#壓縮
tar -czvf ***.tar.gz
tar -cjvf ***.tar.bz2
#解壓縮
tar -xzvf ***.tar.gz
tar -xjvf ***.tar.bz2

 

 tar  [主選項+輔選項] 文件或目錄
主選項是必須要有的,它告訴tar要做什么事情。
輔選項是輔助使用的,可以選用。

tar常用命令:

主選項:
-x    從檔案文件中釋放文件。
-c    創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。
-r     把要存檔的文件追加到檔案文件的末尾。例如用戶已經做好備份文件,又發現還有一個目錄或
         是一些文件忘 記備份了,這時可以使用該選項,將忘記的目錄或文件追加到備份文件中。
-t       列出檔案文件的內容,查看已經備份了哪些文件。
-u      更新文件。就是說,用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,
          則把它追加到備份文件的最后。

輔助選項:
-j         代表使用‘bzip2’程序進行文件的壓縮    tar.bz2
-z       用gzip來壓縮/解壓縮文件,加上該選項后可以將檔案文件進行壓縮,但還原時也一定要使用該
            選項進行解壓縮。   tar.gz
-v       詳細報告tar處理的文件信息。如無此選項,tar不報告文件信息。
-b     該選項是為磁帶機設定的,其后跟一數字,用來說明區塊的大小,系統預設值為20(20×512 bytes)。
-f       使用檔案文件或設備,這個選項通常是必選的。
-k       保存已經存在的文件。例如把某個文件還原,在還原的過程中遇到相同的文件,不會進行覆蓋。
-m       在還原文件時,把所有文件的修改時間設定為。
-M      創建多卷的檔案文件,以便在幾個磁盤中存放。
-w           每一步都要求確認。

tar包管理
1、tar包的創建
tar -cvf  file.tar file1  file2
tar -zcvf  file.tar.gz  file1  file2
tar -jcvf   file.tar.bz2  file1  file2

2、tar包的查看
tar -tvf  file.tar
tar -ztvf  file.tar.gz
tar -jtvf  file.tar.bz2

3、釋放tar包
tar -xvf  file.tar
tar -zxvf  file.tar.gz
tar -jxvf  file.tar.bz2

 

 
 
補充一點   如果需要打包一個文件夾,但其中的幾個文件不需要打包,命令如下
打包test文件夾      test里的  1  這個文件夾不需要打包
[root@localhost /]# cd /usr/test
[root@localhost test]# ls
1  2  3
 
返回/usr 目錄
[root@localhost test]# cd /usr
[root@localhost usr]# tar -zcvf test.tar.gz --exclude=test/1 test
test/
test/3/
test/3/333.png
test/2/
test/2/222.png
 
果然沒有打包test/1 文件夾 
 
[root@localhost usr]# tar -zcvf test.tar.gz --exclude=test/1 test
                                                  打包命令    包名字      排除文件(注意路徑)    打包文件
 

 

范例一:將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar

[root@linux ~] #  tar -cvf /tmp/etc.tar /etc  <==僅打包,不壓縮!

[root@linux ~] #  tar -czvf /tmp/etc.tar.gz /etc  <==打包后,以 gzip 壓縮

[root@linux ~] #  tar -cjvf /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 -tzvf /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 -xzvf /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 -xzvf /tmp/etc.tar.gz etc/passwd

# 我可以透過 tar -tzvf 來查閱 tarfile 內的文件名稱,如果單只要一個檔案,

# 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!

 

范例五:將 /etc/ 內的所有檔案備份下來,並且保存其權限!

[root@linux ~] #  tar -czvpf /tmp/etc.tar.gz /etc

# 這個 -p 的屬性是很重要的,尤其是當您要保留原本檔案的屬性時!

 

范例六:在 /home 當中,比 2005/06/01 新的檔案才備份

[root@linux ~] #  tar -N '2005/06/01' -czvf home.tar.gz /home

 

范例七:我要備份 /home, /etc ,但不要 /home/dmtsai

[root@linux ~] #  tar --exclude /home/dmtsai -czvf 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 時,再次提到這個指令跟大家再解釋啰!

 

 

++++++++++++++++++++++++++++++++++++++++++++

 

 

tar如何解壓文件到指定的目錄?

 

tar czvf mysql.tar.gz /var/lib/mysql
壓縮的文件,我想解壓到當前目錄下,而不是絕對路徑下,該如何解壓?
tar cxvf mysql.tar.gz 的話,會覆蓋  /var/lib/mysql 下全部文件吧?我現在就一個表壞了,想單獨恢復一個表的資料,而不是恢復全部數據庫,所以要解壓到指定的目錄下,再把那個表資料找不來恢復。

============================================ 

#tar zxvf mysql.tar.gz -C /home/aaa

============================================

tar zxvf mysql.tar.gz -C /home/aaa
這樣的話,解壓后的目錄結構是怎么樣的?
/home/aaa/var/lib/mysql 嗎?

============================================  

試下就知道了....

============================================

歸檔里面的所有文件均是相對引用,歸檔解壓縮(釋放)在了當前目錄。歸檔文件總是釋放到當前目錄,為的是防止破壞文件系統中重名的文件。
所以,樓主的解壓縮不會覆蓋 /var/lib/mysql,只會釋放在當前目錄先,即 ./var/lib/mysql如果想覆蓋的話,在歸檔和解壓時請使用 -P參數:
tar zcvf mysql.tar.gz -P /var/lib/mysql
tar -Pzxvf mysql.tar.gz

============================================

 

 

 

zip:

$ zip -r -q -o shiyanzip /home/shiyan
$ du -h shiyan.zip
$ file shiyan.zip

上面命令將 shiyan 的 home 目錄打包成一個文件,並查看了打包后文件的大小和類型。
第一行命令中,
    -r    (recursive)參數表示遞歸打包包含子目錄的全部內容,
    -q   (quit)參數表示為安靜模式,即不向屏幕輸出信息,

    -o,表示輸出文件,需在其后緊跟打包輸出文件名。
    后面使用du命令查看打包后文件的大小(后面會具體說明該命令)。


  • 設置壓縮級別為9和1(9最大,1最小),重新打包:
    $ zip -r -9 -q -o shiyanlou_9.zip /home/shiyan -x ~/*.zip
    $ zip -r -1 -q -o shiyanlou_1.zip /home/shiyan -x ~/*.zip

    $ du -h -d 0 *.zip ~ | sort
       74m /home/shiyan 
       34m shiyan_9.zip
       37m 
    shiyan_1.zip
       

     

這里添加了一個參數用於設置壓縮級別-[1-9],1表示最快壓縮但體積大,9表示體積最小但耗時最久。
最后那個-x是為了排除我們上一次創建的 zip 文件,否則又會被打包進這一次的壓縮文件中,
注意:這里只能使用絕對路徑,否則不起作用

我們再用du命令分別查看默認壓縮級別、最低、最高壓縮級別及未壓縮的文件的大小:

 

  • 創建加密zip包

使用-e參數可以創建加密壓縮包:
$ zip -r -e -o shiyan_encryption.zip /home/shiyan

注意: 關於zip命令,因為 Windows 系統與 Linux/Unix 在文本文件格式上的一些兼容問題,
比如換行符(為不可見字符),在 Windows 為 CR+LF(Carriage-Return+Line-Feed:回車加換行),
而在 Linux/Unix 上為 LF(換行),
所以如果在不加處理的情況下,在 Linux 上編輯的文本,在 Windows 系統上打開可能看起來是沒有換行的。
如果你想讓你在 Linux 創建的 zip 壓縮文件在 Windows 上解壓后沒有任何問題,那么你還需要對命令做一些修改:

$ zip -r -l -o shiyanlou.zip /home/shiyanlou

需要加上-l參數將LF轉換為CR+LF來達到以上目的。

 

使用unzip命令解壓縮zip文件

shiyanlou.zip解壓到當前目錄:

$ unzip shiyan.zip

使用安靜模式,將文件解壓到指定目錄:

$ unzip -q shiyan.zip -d ziptest

上述指定目錄不存在,將會自動創建。如果你不想解壓只想查看壓縮包的內容你可以使用-l參數:

$ unzip -l shiyanlou.zip

       注意: 使用unzip解壓文件時我們同樣應該注意兼容問題,不過這里我們關心的不再是上面的問題,而是中文編碼的問題.
       通常 Windows 系統上面創建的壓縮文件,如果有有包含中文的文檔或以中文作為文件名的文件時默認會采用 GBK 或其它編碼,而 Linux 上面默認使用的是 UTF-8 編碼,如果不加任何處理,直接解壓的話可能會出現中文亂碼的問題(有時候它會自動幫你處理),為了解決這個問題,我們可以在解壓時指定編碼類型。

使用-O(英文字母,大寫o)參數指定編碼類型:

unzip -O GBK 中文壓縮文件.zip

 

 

 

rar打包壓縮命令:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM