Posted on 2007-09-04 17:17
趙永超 閱讀(1089)
評論(0) 編輯 收藏 所屬分類:
Linux
Windows下最常見的壓縮文件只有兩種,.zip和.rar。可是Linux就不同了,有.Z、bz2、.gz、.tar、.tar.gz等眾多的壓 縮文件名,它們分別對應了各種壓縮打包命令。要了解這些壓縮打包命令的使用,首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄什么的變成一個 總的文件,壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。Linux中的很多壓縮命令只能針對一個文件進行壓縮,當要壓縮一大堆文件時,就得先 借助打包命令將這一大堆文件先打成一個包,然后再用壓縮命令進行壓縮。因此打包命令在Linux的應用中具有很重要的作用。
Linux下最常用的打包命令就是tar,使用tar命令打包后,就可以用其它的命令來進行壓縮了。tar命令的使用方法如下:
tar [-cxtzjvfpPN] 文件與目錄
參數說明:
-c :建立一個打包文件;
-x :解開一個打包文件;
-t :查看 tar包里面的文件;
(特別注意,在選擇參數時,c/x/t僅能存在一個,不可同時存在,因為不可能同時壓縮與解壓縮。)
-z :打包后用gzip壓縮,生成.tar.gz文件;
-j :打包后用zip2壓縮,生成.tar.bz2文件;
-v :壓縮的過程中顯示文件;
-f :使用文件名,請留意,在f之后要立即接文件名,不要再加其它參數;
-p :保持原文件的屬性;
-P :使用絕對路徑來壓縮;
-N :設定日期(yyyy/mm/dd),比后面接的日期還要新的文件才會被打包進新建的文件中;
--exclude FILE:在打包的過程中,不要將FILE打包。
舉幾個例子:
例一:將整個/etc目錄下的文件全部打包成為/tmp/etc.tar
tar -cvf /tmp/etc.tar /etc #僅打包,不壓縮
tar -zcvf /tmp/etc.tar.gz /etc #打包后,以gzip壓縮
tar -jcvf /tmp/etc.tar.bz2 /etc #打包后,以bzip2壓縮
例二:查閱上述/tmp/etc.tar.gz文件內有哪些文件
tar -ztvf /tmp/etc.tar.gz
例三:將/tmp/etc.tar.gz文件解壓縮到/usr/local/src下
cd /usr/local/src #先將工作目錄變換到/usr/local/src下
tar -zxvf /tmp/etc.tar.gz
例四:只將/tmp/etc.tar.gz內的etc/passwd解壓到/tmp下
cd /tmp
tar -zxvf /tmp/etc.tar.gz etc/passwd
例五:將/etc內的所有文件備份下來,并且保存其權限!
tar -zxvpf /tmp/etc.tar.gz /etc
例六:在/home當中,比2005/06/01新的文件才備份
tar -N '2005/06/01' -zcvf home.tar.gz /home
例七:備份/home、/etc,但不要/home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
例八:將/etc打包后直接解開在/tmp底下,而不產生文件!
cd /tmp
tar -cvf - /etc | tar -xvf -
現在有一個需求,不知道該如何才能實現
壓縮: tar czvf /data/backup/test.tar.gz /data/a/b/directory
解壓:
cd /data/test
tar xzvf /data/backup/test.tar.gz
問題是,解壓后的文件,在/data/test/data/a/b/directory里面
能否壓縮時只保留directory以下的所有目錄,以directory作為/,而不是/data/a/b/directory?
問題已經解決,找到了GNU tar的官方資料
http://www.delorie.com/gnu/docs/tar/tar_98.html
這樣寫就可以解決了
tar czvf /data/backup/test.tar.gz /data/a/b/directory
改成
tar czvf /data/backup/test.tar.gz -C /data/a/b(空格)directory
-C是臨時切換工作目錄,-P是絕對路徑,在這里只用到-C參數就行了