Linux文件的打包和壓縮

1、打包和解打包

把多個文件和目錄存儲到一個文件中,文件的大小等於所有匯合文件和目錄的總和。方便壓縮文件,並且目錄不能直接壓縮,目錄要經過打包才能壓縮。

  • 1.1 tar 打包操作

命令完整格式:tar [選項] 源文件或目錄

  • 選項
    主要是挑出常用增刪改查的選項參數
選項參數 說明
-c 創建包文件
-f 指定包的文件名。創建、添加、刪除、查看都要指定包的文件名
-v 顯示打包的過程
A 添加tar文件,相當於把tar文件的集合添加到目標包文件下
-r 添加目錄到包下,會出現重複添加,建議用-u參數
-t 查看包的文件信息
–delete 從歸檔(非磁帶!)中刪除
-u 更新包中的文件,僅追加比歸檔中副本更新的文件
–remove-files 打包後刪除源文件
    • 打包文件或目錄
      打包文件
    • 添加tar文件
      在這裏插入圖片描述
    • 添加普通文件或目錄到tar下
    • 刪除包文件下的目錄或文件
      在這裏插入圖片描述
    • 更新包的文件。建議追加文件時,都用這個參數,用-r參數會重複添加文件到包下
[root@VM_0_6_centos tmp]# tar -rf new.tar mv2 #追加mv2目錄到new.tar包
[root@VM_0_6_centos tmp]# tar -tf new.tar  #查看new.tar的文件信息
movie/
mv2/
[root@VM_0_6_centos tmp]# tar -rf new.tar mv2 #再次追加mv2目錄到new.tar
[root@VM_0_6_centos tmp]# tar -tf new.tar #發現包下重複添加,不會覆蓋
movie/
mv2/
mv2/
[root@VM_0_6_centos tmp]# tar -f new.tar --delete mv2 # 把歸檔下的mv2目錄刪除
[root@VM_0_6_centos tmp]# tar -tf new.tar #查看包下的文件信息,mv2目錄成功移除
movie/
[root@VM_0_6_centos tmp]# tar -tf new.tar
[root@VM_0_6_centos tmp]# tar -tf new.tar
[root@VM_0_6_centos tmp]# tar -uf new.tar mv2
[root@VM_0_6_centos tmp]# tar -uf new.tar mv2
[root@VM_0_6_centos tmp]# tar -tf new.tar #執行兩次追加命令(-u參數),包下不重複
movie/
mv2/

1.2 tar解打包操作

命令格式:tar [選項] 包名

  • 選項

    選項參數 說明
    -x 解打包
    -C 指定解包的目錄
    –keep-old-files 解包時到目錄下時,當有重複的文件名時,不會覆蓋重複文件。默認是覆蓋
[root@VM_0_6_centos tmp]# tar -xf new.tar # 把歸檔文件解到工作目錄
[root@VM_0_6_centos tmp]# tar -xf new.tar -C  ~/test_tar/ # 把歸檔文件解到指定目錄
[root@VM_0_6_centos tmp]# tar -xf new.tar --keep-old-files # 不會覆蓋文件
tar: bashrc: Cannot open: File exists
tar: man_db.conf: Cannot open: File exists
tar: appendFile: Cannot open: File exists
tar: Exiting with failure status due to previous errors
#上面的結果展示,表示bashrc、man_db.conf、appendFile文件已在工作目錄下存在,覆蓋失
敗,當然歸檔下的其他文件解打包是成功的

2、壓縮和解壓

  • 2.1 tar壓縮和解壓命令

tar本身不具有壓縮功能,他是調用壓縮功能實現的。tar沒有壓縮歸檔文件的命令,但是支持同時打包壓縮文件或目錄
命令完整格式:tar [選項] 壓縮名 源文件或目錄

    • 選項
選項參數 說明
-zcf 把文件或目錄壓縮成 “.tar.gz” 格式
-zxf 解壓縮".tar.gz" 格式 的文件
-jcf 把文件或目錄壓縮車工 “.tar.bz2” 格式
-jxf 解壓縮 “.tar.bz2” 格式 的文件
#把appendDir目錄、appendFile文件、new.tar歸檔文件壓縮到new.tar.gz文件
[root@VM_0_6_centos tmp]# tar -zcvf new.tar.gz appendDir appendFile new.tar
appendDir/
appendFile
new.tar

  • 2.2 zip格式文件壓縮和解壓

    • zip壓縮命令

命令格式:zip [選項] 壓縮包名 源文件或源目錄列表

    • 選項
選項參數 說明
-r 壓縮目錄,需要使用這個參數。
-d 刪除文件或目錄
-m 壓縮文件完成後,刪除源文件
-u 更新壓縮文件,即往壓縮文件中添加新文件或更新文件
#zip命令不使用-r壓縮目錄,發現壓縮後目錄容量是0,明顯是錯誤的
[root@VM_0_6_centos DCBreakfast]# zip test_zip.zip DCBreakfast
  adding: DCBreakfast/ (stored 0%)
 #zip命令使用-r壓縮目錄,效果如下
[root@VM_0_6_centos DCBreakfast]# zip -r test_zip.zip DCBreakfast
  adding: DCBreakfast/ (stored 0%)
  adding: DCBreakfast/user.csv (deflated 41%)
  ..............
#刪除壓縮文件中的一個文件
[root@VM_0_6_centos DCBreakfast]# zip test_zip.zip -d DCBreakfast/view.py
deleting: DCBreakfast/view.py
#刪除壓縮文件的一個目錄
[root@VM_0_6_centos DCBreakfast]# zip test_zip.zip -d DCBreakfast/logs/
deleting: DCBreakfast/logs/

    • unzip解壓縮命令

unzip爲.zip壓縮文件的解壓縮程序

命令完整格式:unzip [選項] 壓縮包名

    • 選項
選項參數 說明
-d 解壓到指定目錄
-n 解壓時不要覆蓋原有的文件。遇到重名的文件,程序默認詢問
-o 解壓時覆蓋原有的文件。遇到重名的文件,程序默認詢問
-u 更新壓縮文件,即往壓縮文件中添加新文件。
-v 查看壓縮的文件信息
#解壓到指定目錄
[root@VM_0_6_centos DCBreakfast]# unzip test_zip.zip -d test_dir
Archive:  test_zip.zip
   creating: test_dir/DCBreakfast/
  inflating: test_dir/DCBreakfast/user.csv  
  inflating: test_dir/DCBreakfast/server_version.csv  
   creating: test_dir/DCBreakfast/.idea/
	...........
#解壓部分文件到當前工作目錄
[root@VM_0_6_centos DCBreakfast]# unzip test_zip.zip DCBreakfast/urls.py -d test_dir/
Archive:  test_zip.zip
  inflating: test_dir/DCBreakfast/urls.py  
  • 2.3 gz格式文件的壓縮和解壓

    • gzip壓縮命令

gzip 命令只能用來壓縮文件,不能壓縮目錄,即便指定了目錄,也只能壓縮目錄內的所有文件。

命令格式:gzip [選項] 壓縮名 文件名或目錄

      • 選項
選項參數 說明
-r 壓縮目錄
-c 將壓縮數據輸出到標準輸出中,並保留源文件。如果壓縮的是目錄時,不建議使用這個參數,壓縮的目錄解壓後發現是文件格式的
-l 對每一個壓縮文件,顯示以下字段:壓縮文件的大小、未壓縮文件的大小、壓縮比、未壓縮文件的名稱
-d 對壓縮文件進行解壓縮

在 Linux 中,打包和壓縮是分開處理的。而 gzip 命令只會壓縮,不能打包,所以纔會出現沒有打包目錄,而只把目錄下的文件進行壓縮的情況。

#-r是壓縮目錄 -c是保留源文件。以下直接壓縮目錄是錯誤的做法,會導致解壓後是一個文件。先歸檔文件,再壓縮
[root@VM_0_6_centos tmp]# gzip -rc DCBreakfast>DCBreakfast.gz

#直接壓縮目錄,發現是壓縮是把目錄下的文件進行壓縮
[root@VM_0_6_centos tmp]# gzip -r DCBreakfast
[root@VM_0_6_centos tmp]# ll DCBreakfast
total 64K
-rw-r--r-- 1 root root  304 May  6 09:15 asgi.py.gz
-rw-r--r-- 1 root root  17K May  6 09:39 DCPage.html.gz
-rw-r--r-- 1 root root   32 May  6 09:15 __init__.py.gz
drwxr-xr-x 3 root root 4.0K May 11 19:51 logs
drwxr-xr-x 2 root root 4.0K May 11 19:51 __pycache__
-rw-r--r-- 1 root root   69 May  6 09:15 server_version.csv.gz

#壓縮目錄時,有使用-c參數,導致目錄壓縮後改變格式
[root@VM_0_6_centos tmp]# ll -d DCBreakfast
drwxr-xr-x 6 root root 4.0K May 11 20:26 DCBreakfast
[root@VM_0_6_centos tmp]#gzip -rc DCBreakfast>DCBreakfast.gz #壓縮目錄並保留源文件
[root@VM_0_6_centos tmp]# gunzip -r DCBreakfast.gz
gzip: DCBreakfast already exists; do you wish to overwrite (y or n)? y
gzip: DCBreakfast: Is a directory
[root@VM_0_6_centos tmp]# ll -d DCBreakfast
drwxr-xr-x 6 root root 4.0K May 11 20:26 DCBreakfast



    • gunzip壓縮命令

      gunzip是gzip的硬鏈接
      • 選項
選項參數 說明
-r 解壓目錄
-c 將解壓後的文件輸出到標準輸出中,並保留源文件。
-f 強制解壓縮文件,不理會文件是否存在
-l 對每一個壓縮文件,顯示以下字段:壓縮文件的大小、未壓縮文件的大小、壓縮比、未壓縮文件的名稱
#把壓縮的文件解壓,進入到DCBreakfast目錄下,發現gz格式文件解壓並刪除了
[root@VM_0_6_centos tmp]# gunzip -r DCBreakfast
#
[root@VM_0_6_centos tmp]# gunzip -l DCBreakfast/asgi.py.gz 
         compressed        uncompressed  ratio uncompressed_name
                304                 415  33.0% DCBreakfast/asgi.py

  • 2.4 bz2格式文件的壓縮和解壓

    • bzip2壓縮命令

同 gzip 命令類似,只能對文件進行壓縮(或解壓縮),對於目錄只能壓縮(或解壓縮)該目錄及子目錄下的所有文件

命令格式:bzip2 [選項] 壓縮名 文件名或目錄

選項參數 說明
-d 執行解壓縮,此時該選項後的源文件應爲標記有 .bz2 後綴的壓縮包文件。
-k bzip2 在壓縮或解壓縮任務完成後,會刪除原始文件,若要保留原始文件,可使用此選項。
-f bzip2 在壓縮或解壓縮時,,默認不會覆蓋現有文件,若使用此選項,則會強制覆蓋現有文件。
-v 壓縮或解壓縮文件時,顯示詳細信息。
    • bunzip2解壓

      bunzip2是bzip2的硬連接

命令格式:bunzip2 [選項] 源文件

選項參數 說明
-k bzip2 在壓縮或解壓縮任務完成後,會刪除原始文件,若要保留原始文件,可使用此選項。
-f bzip2 在壓縮或解壓縮時,,默認不會覆蓋現有文件,若使用此選項,則會強制覆蓋現有文件。
-L 列出壓縮文件內容

總結

-----------------------------------壓縮常用命令
#歸檔、zip、gz、bz2格式文件的創建
tar -cvf 包名 文件名或目錄 
zip -r 壓縮名 文件名或目錄 
tar -zcvf 壓縮名 文件名或目錄 
tar -jcvf 壓縮名 文件名或目錄 

# 解包解壓
tar -xvf 包名
unzip -d 壓縮名
tar -zxvf 壓縮名
tar -jxvf 壓縮名

# 查看包文件、壓縮文件的信息
tar -t 
unzip -v 
gunzip -l
bunzip2 -L


---------------------------------以下是差異比較------------------------------------
#-r參數:
tar -r:追加文件到歸檔
zip -r:相當打包目錄並壓縮,否則會出現壓縮的是空目錄,子目錄都沒有壓縮成功。
gzip -r:把目錄下的文件進行壓縮。建議壓縮前先打包,或者執行 tar -
bzip2:沒有-r參數,只可以壓縮文件,所以

#操作文件到指定目錄下:
tar -cf  #不支持打包文件到指定目錄
zip #不支持
unzip -d 壓縮名 目標目錄	#解壓文件到指定目錄
gunzip  #不支持
bzip2 #不支持
bunzip2 #不支持


#查看文件信息:
tar -t 
unzip -v 
gunzip -l
bzip2 -L

#操作後刪除源文件:
tar --remove-files:默認不刪除,歸檔後刪除源文件用這個參數
zip -m :默認不刪除,壓縮後刪除源文件用這個參數
gzip 壓縮後默認刪除源文件,保留源文件請用-c參數
bzip2 壓縮後默認刪除源文件,保留源文件請用-k參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章