linux压缩和解压缩命令tar,zip,gzip

本文详细介绍了Linux中常用的文件压缩命令,包括tar、zip、gzip和bzip2。tar主要用于归档文件,可结合gzip或bzip2进行压缩;zip用于压缩单个或多个文件,更新和删除存档中的文件;gzip快速压缩,而bzip2提供更高压缩率但速度较慢。文章提供了各种命令的语法、选项和实际示例,帮助用户更好地管理和压缩文件。
摘要由CSDN通过智能技术生成

Linux上有很多解压缩文件的命令。其中最新和最有效的是xz,但他们都有节省磁盘空间和保存文件供以后使用的优点。在这篇文章中,我们比较了解压缩命令并指出了显著的区别。

1.tar

语法:

tar [options] [archive-file] [file or directory to be archived]
options:
-c:压缩
-x:解压
-f:创建具有给定文件名的压缩文档
-t:显示或列出压缩文件中的文件
-u:压缩并且添加到已有的压缩文件中
-v:显示详细信息
-A:连接压缩文件
-z:告诉tar命令使用gzip创建tar文件
-j:使用tbzip过滤tar压缩文件
-W:验证压缩文件
-r:在已经存在的.tar文件中更新或添加文件或目录

archive-file:
归档文件是由一个或多个文件以及元数据组成的文件。归档文件用于将多个数据文件收集到一个文件中,
以便于移植和存储,或者简单的压缩文件以使用更少的存储空间。

tar命令并不是专门的压缩命令。它通常用于将多个文件拉入一个文件中,以便于传输到另一个系统或将这些文件作为一个相关组进行备份。它还提供压缩功能,这很有意义,并且可以添加z压缩选项来实现这一点。

  • 1.当使用z选项将压缩添加到tar命令中时,tar会使用gzip进行压缩。
    你可以使用tar来压缩单个文件,就像压缩一组文件一样简单,不过这并不比直接使用gzip有什么特别 的优势。要使用tar来完成此操作,只需使用tar cfz newtarfile filename命令来标识该文件,如下所示:

    tar cfz bigfile.tgz bigfile
            new file     file to be compressed
    
    ls -l bigfile*
    -rw-rw-r-- 1 shs shs 103270400 Apr 16 16:00 bigfile
    -rw-rw-r-- 1 shs shs 21270400 Apr 16 16:00 bigfile.tgz
    

    需注意文件大小的显著减小
    如果你愿意,你可以使用tar.gz扩展名,这可能会使文件的特征更明显,但大多数Linux用户认为tgz表示相同的意思–tar和gz的组合表示该文件是一个压缩的tar文件。压缩完成后,你将同时保留原始文件和压缩文件。

  • 2.要将多个文件收集在一起并使用一行命令生成tar ball,使用相同的语法但是指定所包含的文件是一个组而不是单个文件,举个例子:

    tar cfz   bin.tgz    bin/*
             new file    files to include
    
  • 3.使用选项-cvf创建未压缩的tar存档文件:此命令创建一个名为file.tar的tar文件,他是当前目录中所有.c文件的存档。

    tar cvf file.tar *.c
    
  • 4.使用选项-xvf从存档文件中提取文件:此命令从存档文件提取文件:

    tar xvf file.tar
    
  • 5.使用选项-z对tar归档文件进行gzip压缩:此命令创建一个名为file.tar.gz的tar文件,它是.c文件的归档文件

    tar cvzf file.tar.gz *.c
    
  • 6.使用选项-xvzf提取gzip tar归档文件*.tar.gz:此命令从tar归档文件file.tar.gz文件中提取文件。

    tar xvzf file.tar.gz
    
  • 7.在Linux中使用选项-j创建压缩的tar归档文件:此命令压缩并创建小于gzip大小的存档文件。压缩和解压缩都比gzip花费更多的时间。

    tar cvfj file.tar.tbz example.cpp
    

    输出:

    $tar cvfj file.tar.tbz example.cpp
    example.cpp
    $tar tvf file.tar.tbz
    -rwxrwxrwx root/root 94 2021-09-17 02:47 example.cpp
    
  • 8.在Linux中解压单个tar文件或指定目录:此命令将使用-C选项解压当前目录或指定目录中的文件。

    tar xvfj file.tar
    or
    tar xvfj file.tar -C path of file in directory
    
  • 9.在Linux中解压多个.tar、.tar.gz、.tar.tbz文件:此命令将从.tar、.tar.gz、.tar.tbz文件中提取或解压多个文件。例如,下面的命令将从存档文件中提取"fileA",“fileB”。

    tar xvf file.tar "fileA" "fileB"
    or
    tar zxvf file1.tar.gz "fileA" "fileB"
    or
    tar jxvf file2.tar.tbz "fileA" "fileB"
    
  • 10.检查Linux中现有.tar、.tar.gz、.tar.tbz文件的大小:下述命令将以KB显示存档文件的大小。

    tar czf file.tar | wc -c
    or
    tar czf file1.tar.gz | wc -c
    or
    tar czf file2.tar.tbz |wc -c
    
  • 11.更新Linux中现有的tar文件

    tar rvf file.tar *.c
    
  • 12.通过grep命令应用管道找我们要查找的内容:此命令从存档文件中列出grep中提到的文本或图像。

    tar tvf file.tar|grep "text to find"
    or
    tar tvf file.tar|grep "filename.file extension"
    
  • 13.我们可以传递文件名作为参数来搜索tar文件:此命令查看存档文件及其详细信息。

    tar tvf file.tar filename
    
  • 14.搜索png格式的图片

    tar tvf file.tar --wildcards '*.png'
    

    注意在上面的命令中,”*“用于代替文件名以获取该特定目录中存在的所有文件。

2.zip

ZIP是Unix的压缩和打包工具,每个文件存储在单个.zip文件中,扩展名为zip。

  • 1.语法:
zip [options] zipfile files_list
  • 2.创建一个zip 的语法
zip myfile.zip file.txt
  • 3.提取zip
unzip myfile.zip
  • 4.可选项-d:从zip存档中删除文件。创建zip文件后,可以使用-d选项从存档中删除文件。假设我们在当前目录中有以下文件:
    hello1.cpp
    hello2.cpp
    hello3.cpp
    hello4.cpp
zip -d myfile.zip hello4.cpp

上面代码从myfile.zip删除hello4.cpp

  • 5.-u选项:更新zip归档文件中的文件。此选项可用于更新指定的文件列表或向现有的zip文件添加新文件。只有当zip归档文件中的现有条目的修改时间比zip归档文件中已有的版本更晚时,才更新该条目。
zip -u filename.zip file.txt
zip -u myfile.zip hello5.cpp

从myfile.zip文件更新hello5.cpp,可以使用unzip命令恢复文件。

unzip myfile.zip
ls
hello1.cpp
hello2.cpp
hello3.cpp
hello4.cpp
hello5.cpp
  • 6.-m选项:删除压缩后的原始文件,这对于节省磁盘空间很有用,但删除所有输入文件有潜在风险。
zip -m filename.zip file.txt
zip -m myfile.zip *.cpp
  • 7.-r选项:要递归压缩目录,请在zip命令中使用-r选项,它将递归压缩目录中的文件。此选项可帮助压缩指定目录中存在的所有文件。
zip -r filename.zip directory_name

假设我们在docs目录下有以下文件:
unix.pdf
oracle.pdf
linux.pdf

Command:
zip -r mydir.zip docs
Output:
adding: docs/  //压缩目录
adding:docs/unix.pdf  //压缩第一个文件
adding:docs/oracle.pdf  //压缩第二个文件
adding:docs/linux.pdf  //压缩第三个文件
  • 8.-x选项:在创建zip时排除文件。假设正在压缩当前目录中的所有文件,并希望排除一些不需要的文件,可以使用-x选项排除这些不需要的文件。
zip -x filename.zip file_to_be_excluded
  • 9.-v选项:详细模式或打印诊断版本信息
zip -v filename.zip file1.txt

假设我们在当前目录下有以下文件:
hello1.cpp
hello2.cpp
hello3.cpp
hello4.cpp
hello5.cpp

Command
zip -v file1.zip *.c
Output:
adding hello1.cpp (in=0) (out=0) (stored 0%)
adding hello2.cpp (in=0) (out=0) (stored 0%)
adding hello3.cpp (in=0) (out=0) (stored 0%)
adding hello4.cpp (in=0) (out=0) (stored 0%)
total bytes=0, compressed=0 -> 0% savings

3.gzip

Gzip用于压缩文件。每个单独的文件被压缩成一个单独的文件。压缩文件由一个GNU zip头文件和压缩后的数据组成。
如果给定一个file作为参数,gzip将压缩该文件,添加一个.gz后缀,并删除原始文件。在没有参数的情况下,gzip压缩标准输入并将压缩文件写入标准输出。
Unix中Gzip和zip命令的区别以及何时使用哪种命令

  • Zip和Gzip是两种非常流行的压缩文件的方法,它们是为了节省空间,或者减少通过网络或互联网传输文件所需的时间。
    一般来说,在压缩方面,GZIP比ZIP要好得多,特别是在压缩大量文件时候。
  • GZIP的常见做法是在压缩之前将所有文件存档到一个tarball中。在ZIP文件中,单个文件被压缩,然后添加到存档中。
  • 当想从ZIP中提取单个文件时候,只需先提取它,然后解压缩即可。使用GZIP,需要先解压缩整个文件,然后才能从存档中提取所需的文件。
  • 从10GB存档中提取1MB文件时,肯定GZIP比ZIP需要更长的时间。
  • 由于GZIP中的压缩算法压缩一个大文件而不是多个小文件,因此它可以利用文件中的冗余进一步减小文件大小。
  • 如果你使用ZIP和GZIP归档和压缩10个相同的文件,则ZIP文件将比生成的GZIP文件大10倍以上。
    语法:
gzip [options] [filenames]
gzip mydoc.txt

该命令将创建一个名为mydoc.txt.gz的压缩文件并删除原始文件。
可选项

  • 1.-f:有时候无法压缩文件。也许你正在尝试压缩一个名为“myfile1”的文件,但已经有一个名为“myfile1.gz"的文件。在这种情况下,"gzip"命令通常不起作用。要强制"gzip"命令执行其操作,只需要使用-f选项:
gzip -f myfile1.txt

这将强制压缩名为myfile1.txt的文件,即使已经存在名为myfile1.txt.gz的文件。

  • 2.-k:默认情况下,当你使用gzip命令压缩文件时候,你最终会得到一个扩展名为.gz的新文件。如果想压缩文件并保留原始文件,则必须使用gzip命令的-k选项:
gzip -k mydoc.txt

上面的命令最终会生成一个名为mydoc.txt.gz和mydoc.txt的文件。

  • 3.-r选项:此选项可以压缩文件夹及其子文件夹中的每个文件。此选项不会创建名为foldername.gz的文件。相反,它遍历目录结构并压缩该文件夹结构中的每个文件。
gzip -r testfolder

这将压缩testfolder中存在的所有文件。

  • 4.[1-9]选项:它允许更改压缩级别。可以以不同方式压缩文件。例如,你可以选择较小的压缩,你也可以选择较大的压缩。
gzip -1 mydoc.txt  # 这将以最慢的速度获得最大的压缩
gzip -9 mydoc.txt  # 这将以最快的速度会的最小的压缩
  • 5.-v选项:此选项显示压缩或解压缩的每个文件的名称和减少百分比。
gzip -v mydoc.txt
# new.txt  18.2% -- replaced with new.txt.gz
  • 6.-d选项:此选项允许使用gzip命令解压文件
gzip -d mydoc.txt.gz

此命令将解压缩名为mydoc.txt.gz的压缩文件。
我们也可以使用gunzip来解压缩文件:

gunzip mydoc.txt.gz

4.bzip2

bzip2与gzip非常相似,但是用了不同的压缩算法。使用bzip2压缩的文件将以.bz2扩展名结尾。
就像我说的,bzip2的用法和gzip几乎一样。只需要将上述示例中的gzip替换为bzip2,将gunzip替换为bunzip2,将zcat替换为bzcat等等。

bzip2 mydoc.txt
# 如果不想替换原始文件,请使用-c标志并将输出写入新文件
bzip2 -c mydoc.txt > mydoc.txt.bz2
# 解压
bzip2 -d mydoc.txt.bz2
# or
bunzip2 mydoc.txt.bz2
# 要在不解压的情况下查看压缩文件的内容:
bunzip2 -c mydoc.txt.bz2
# or
bzcat mydoc.txt.bz2

参考目录

geeksforgeeks.org/gzip-command-linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值