Linux/macOS上Shell详解:tar和zip命令

2,984 阅读4分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

前言

好久没有记录Linux命令了,这次文章相当于一个笔记。

在使用Linux时候,难免需要对文件进行解压或者压缩,尤其是在服务器上,没有GUI界面,用Shell进行操作,就需要我们会一些命令:

  • zip&unzip:ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate。在Linux可以使用zip命令对其压缩或或增减;使用unzip可以解压出ZIP文件。
  • tar&gztar是Unix和类Unix系统上的归档打包工具,可以将多个文件合并为一个文件;而gz或者说gzip则类Unix上的文件解压缩的软件。两个经常一起使用。

ZIP

针对ZIP文件,主要有两个命令:

# 解压
uizp
# 压缩
zip

细节参考:

解压:unzip

直接解压

首先介绍最常用的,也就是不带参数直接解压

unzip juejinTemp.zip

直接解压 可以看到,解压就成功了。

指定输出目录

如果你想制定输出目录:

# 解压文件到temp目录内
unzip -d temp juejinTemp.zip

解压到temp文件夹内

注意:如果temp文件夹不存在,那么会自动创建这个文件夹(如果全新足够);但是如果上级目录都不存在,就创建不了了哦。

文件详情

当然,如果想知道ZIP文件里是什么,如何再决定是否需要创建文件夹解压。也很简单:

unzip -l juejinTemp.zip

查看ZIP文件内

查看ZIP文件内.png

这里使用-l命令,你也可以用-v替代。区别就是,后者显示内容更详细。

可以看到,图一就是解压后,会有一个文件夹套住剩下四个文件。而图二就没有。这个时候,建议图二解压时候,用-d命令指定到空文件夹内。

指定具体文件

最后,如果你只想解压出内部一个文件,也很简单:

unzip juejinTemp.zip juejinTemp/after.txt

解压出内部一个文件 事实上,这个命令是一个变长参数语法糖,你可以后面更多个文件来指定需要解压的东西:

多文件参数

指定文件排除

相对的,如果解压过程中,只想排除某个文件,可以使用-x命令:

unzip juejinTemp.zip -x juejinTemp/1.txt

排除文件

跳过和覆盖

刚刚可以看到,我解压时候有提示:

replace juejinTemp/after.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:

这个其实是解压目的地址已经有这些文件,问我是跳过还是替换、放弃。

如果你也开始就知道要替换,可以加上-o参数;如果选择跳过,那么可以加上-n参数。

压缩:zip

直接压缩

压缩不一样,压缩一定要指定输出的文件名:

zip -q -r juejinTemp.zip *

其中:

  • -q:不显示输出,即:zip运行日志
  • -r:递归压缩,即:文件夹下内容递归
  • *:所有文件

效果

也就是当前文件夹下所有文件全部压缩。切勿在根目录下使用嗷。 相对,想指定压缩目录:

# 压缩文件夹
zip -r juejinTemp juejinTemp

压缩文件夹

删除文件

zip还可以删除文件,举个例子。我们使用unzip查看: 查看

我们想要删除1.txt,只需要用-d命令:

zip -d juejinTemp.zip juejinTemp/1.txt

zip -d命令

TAR

一般tar等文件开头的文件,使用tar命令即可。 比如:zulu8.60.0.21-ca-fx-jdk8.0.322-linux_x64.tar.gz

这个命令比ZIP命令复杂多了。这次就介绍解压(归档)和压缩。足够大家日常使用了/

解压命令

每次看到什么tar.gz、tar.bz2、tar.xz、tar.Z等等结尾的tar文件,是不是眼花缭乱?网上解压方法也是五花八门。

其实 tar从1.15版本开始tar就可以自动识别压缩的格式,故不需人为区分压缩格式就能正确解压:

tar --version

查看tar版本 所以解压只需要一条命令:

tar -xf juejinTemp.tar.gz

解压 其中:

  • -x:解开一个压缩档案的参数指令!
  • -f:使用档名,在f之后要立即接档名嗷。

如果希望显示细节,可以加入参数v,即verbose

tar -xvf juejinTemp.tar.gz

详情输出 如果想要指定解压地址:可在压缩文件后,加空格并加入解压输出地址目录

查看详情

如果你并不想解压,可以使用:

tar -tf juejinTemp.tar.gz

查看压缩文件详情

压缩/归档

压缩文件也比较简单,一条命令:

tar -czf juejinTemp.tar.gz juejinTemp

这样,就将当前目录下所以文件压缩成compression.tar.gz压缩包了。 其中:

  • -c:压缩的的参数指令!
  • -z:启动压缩,不加这个参数,则是普通归档。
  • -f:使用档名,在 f 之后要立即接档名嗷。

效果

你会看到,我多了.DS_Store文件,其实是macOS的日志文件。解决方法很简单,加上--exclude '.DS_Store' --exclude '__MACOSX'即可: macOS上效果

如果你只是想归档,就不需要加-z进行压缩:

归档和压缩

END

到此,tar和zip命令就讲解完了哦。

下次说什么命令好呢?