Linux之unzip解压缩命令
简介
unzip 命令往往用于解压缩 zip 文件,但它能做的不仅仅是如此。今天我们主要介绍一下该命令的作用及用法。
在某些 Linux 发行版上,可能没有默认安装该命令,那需要先安装,可以使用包管理器,比如 Debian 系统中:
1 | sudo apt install unzip |
下面我们来看一下它的用法。
unzip 命令的语法很简单:
1 | unzip [option] zip_file |
如果不使用任何选项,那么它会解压整个给定的文件,看下面的例子:
1 2 3 4 5 6 7 8 9 10 | unzip webdesign.zip Archive: webdesign.zip inflating: 339252-PAJF05-394.ai inflating: 339252-PAJF07-322.eps inflating: 339252-PALBTI-224.ai inflating: 339252-PALBTL-394.eps inflating: 339252-PALBTM-53.jpg inflating: License free.txt inflating: License premium.txt |
有时候,这可能并不是我们想要的。因为如果给定的压缩文件中的文件太多,那么解压后,当前目录中会充斥了大量的文件:
1 2 3 | ls 339252-PAJF05-394.ai 339252-PALBTI-224.ai 339252-PALBTM-53.jpg 'License premium.txt' 339252-PAJF07-322.eps 339252-PALBTL-394.eps 'License free.txt' webdesign.zip |
1,解压到某个目录
一般情况下,我们希望将文件解压到某个目录,然后目录通常是与 zip 文件同名。可以使用 -d 选项,指定将文件提取(压缩)到某个目标目录:
1 | unzip -d target_directory zip_file |
如果目标目录不存在,就会创建。但是不会创建嵌套的目录。
另外,也可以将目标目录(连同选项 -d)放在压缩文件后面,但并不是所有选项都可以放到命令后面。如下所示:
1 | unzip zip_file -d target_directory |
2,在不解压的情况下,查看压缩文件的内容
如果只想查看 zip 文件包中的内容,但是并不想解压它,可以使用 -l 选项,该选项可以让我们查看 zip 文件的内容:
1 | unzip -l zip_file |
在输出的文件列表中,还会现实文件的时间戳和大小(以字节为单位),如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ unzip -l webdesign.zip Archive: webdesign.zip Length Date Time Name --------- ---------- ----- ---- 205358 2023-01-18 23:14 339252-PAJF05-394.ai 996906 2023-01-18 23:14 339252-PAJF07-322.eps 213968 2023-01-20 00:00 339252-PALBTI-224.ai 1005362 2023-01-20 00:00 339252-PALBTL-394.eps 305531 2023-01-20 00:00 339252-PALBTM-53.jpg 1462 2023-01-20 09:45 License free.txt 1116 2023-01-20 09:45 License premium.txt --------- ------- 2729703 |
如果需要,可以使用 -v 选项来获得更多信息,如压缩大小、压缩比等。输出中的 CRC-32 是循环冗余检查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ unzip -v webdesign.zip Archive: webdesign.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 205358 Defl:N 142097 31% 2023-01-18 23:14 792f2380 339252-PAJF05-394.ai 996906 Defl:N 221228 78% 2023-01-18 23:14 440390d3 339252-PAJF07-322.eps 213968 Defl:N 147568 31% 2023-01-20 00:00 cdb64dfc 339252-PALBTI-224.ai 1005362 Defl:N 226727 77% 2023-01-20 00:00 aed3d97a 339252-PALBTL-394.eps 305531 Defl:N 183363 40% 2023-01-20 00:00 e4ced90f 339252-PALBTM-53.jpg 1462 Defl:N 728 50% 2023-01-20 09:45 0eb9e17b License free.txt 1116 Defl:N 558 50% 2023-01-20 09:45 165dd84e License premium.txt -------- ------- --- ------- 2729703 922269 66% 7 files |
3,在不提示的情况下覆盖已有文件
如果在当前目录中,已经存在同名的文件,那么在解压的时候,会有提示“是否要覆盖当前文件”,可以使用 -o 选项,来跳过询问,强制覆盖:
1 | unzip -o -d target_directory zip_file |
4,不要覆盖任何文件
如果不希望覆盖现有文件,可以使用 -n 选项:
1 | unzip -n -d target_directory zip_file |
5,更新且在必要的时候创建文件
更新文件,与覆盖略有不同。当某些文件的时间戳比现有文件更新的时候,才会被覆盖。如果文件不存在,将会直接创建。这种情况下,需要使用 -u 选项:
1 | unzip -u -d target_directory zip_file |
6,更新现有文件,但是不创建新文件
这个例子与前一个略有不同。在本例中,如果有某些文件的时间戳更新,会覆盖这些文件,但是如果文件不存在,那么不会创建新文件。这种情况,可使用 -f 选项:
1 | unzip -f -d target_directory zip_file |
7,在安静模式下解压文件
在解压文件的时候,会在屏幕上现实已经解压的文件。但是当文件有几百个的时候...屏幕会一直出现滚动信息。
可以使用 -q 选项来选择安静模式,这种情况下,在解压的过程中屏幕不会有信息输出。
1 | unzip -q -d target_directory zip_file |
8,解压的时候,排除某些文件
unzip 命令,可以实现在解压的时候,排除某些文件,或者某些类型的文件:
1 | unzip zip_file -x file_to_exclude |
比如,我想在解压的时候,排除 .eps 文件,如下:
1 2 3 4 5 6 7 8 | $ unzip webdesign.zip -x *.eps Archive: webdesign.zip inflating: 339252-PAJF05-394.ai inflating: 339252-PALBTI-224.ai inflating: 339252-PALBTM-53.jpg inflating: License free.txt inflating: License premium.txt |
示例
1 2 3 4 5 6 7 8 9 10 11 | -- “> /dev/null”表示不输出解压结果到屏幕 unzip /media/linux.x64_11gR2/linux.x64_11gR2_database_1of2.zip -d /tmp && unzip /media/linux.x64_11gR2/linux.x64_11gR2_database_2of2.zip -d /tmp > /dev/null unzip p10404530_112030_Linux-x86-64_1of7.zip -d /tmp && unzip p10404530_112030_Linux-x86-64_2of7.zip -d /tmp && unzip p10404530_112030_Linux-x86-64_3of7.zip -d /tmp > /dev/null unzip p6810189_10204_Linux-x86-64.zip -d /tmp 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] |