Linux 解压命令中一个很小很有用的点: 去掉压缩文件中的第一层目录
在使用压缩文件的时候, 有时候压缩文件中会首先包含一个目录, 目录下面再包含很多具体的子目录和文件.
典型的,例如一个tomcat 安装包, apache-tomcat-7.0.79.tar.gz, 是我们看到的文件, 当打开的时候, 第一层目录就是apache-tomcat-7.0.79,如图一所示, 第二层才是包含具体内容的目录,例如包含bin、conf、log 等子目录, 如图二所示。
假如说,我们在解压这个文件的时候,例如解压到/usr/local/tomcat, 只想要第二层目录的结构, 也就是目标的目录结构是/usr/local/tomcat/bin,/usr/local/tomcat/logs, 等等;不想形成/usr/local/tomcat/apache-tomcat-7.0.79/bin这种结构, 该怎么办呢?
直接执行tar xvf apache-tomcat-8*tar.gz -C /usr/local/tomcat, 肯定会形成/usr/local/tomcat/apache-tomcat-7.0.79/bin 这种目录结构。
这时候, 就有这么一个参数, strip-components, 很好地实现我们的果, 先来看怎么执行:
tar xvf apache-tomcat-8*tar.gz -C /usr/local/tomcat --strip-components=1
这个strip-components 指定为1, 表示忽略压缩文件中的第一层目录结构。
对于tar的这个strip-components参数, 可能很多人已经知道了, 但是, 对于zip 文件的解压, 有没有类似的方法呢?
答案是肯定的, unzip 提供了-j 这个参数, 能实现同样的果。
来看例子, 假如说当前目录下有0620.zip这个文件,这个文件中也包含外层的一级目录,如图三所示。
那么解压的时候,想略过第一层目录的话, 就添加-j这个参数:
下面的命令在1这个目录里解压0620.zip,同时不创建第一层目录:
unzip -j -d 1 ./0620.zip
对于unzip 而言, -j 参数的意思是:
-j junk paths (do not make directories)
junk paths直接翻译的意思,就是垃圾目录, 这就太直白了点吧。
解压文件的一点小技巧,学会了吗?