每次在linux解压文件都要去网上查一次,因为记不住后面跟的参数(原因还是不理解这些参数的意思)。所以总结解压命令。
tar命令
首先,tar是一个打包工具,并不是一个压缩工具,tar的压缩功能是调用了别的工具来实现的。
tar命令的用法是 tar [function] [option] pathname。其中必须选择一个function,相当于是指定tar的任务。function可以用简写首字母,可以与后面的option混用(所以之前我都不知道有个function的存在,以为都是option)。所有的function支持见下表。比如说,如果要创建一个归档文件,就用tar -c
,如果是从归档中提取文件,就是tar -x
。
FUNCTION LETTERS
Main operation mode:-A, –catenate, –concatenate
append tar files to an archive-c, –create
create a new archive-d, –diff, –compare
find differences between archive and file system–delete
delete from the archive (not on mag tapes!)-r, –append
append files to the end of an archive-t, –list
list the contents of an archive–test-label
test the archive volume label and exit-u, –update
only append files newer than copy in archive-x, –extract, –get
extract files from an archive
然后是options,其中有一个option(-f
)是必须的,就是指定使用的归档。而且这个参数后面需要跟一个文件名字,所以一般都把它放在tar的最后一个参数上。例如打包文件的命令就是tar -cf new.tar
。其中第一个c
是函数名,可以和后面的option组合。文件名的后缀是为了好识别,不加也可以(推荐加,不然你就不知道一个文件是文件还是归档了)。
常用的参数如下:
- -p或–same-permissions:用原来的文件权限还原文件
- -v:列出处理过的文件,显示运行过程还是挺好的
- -j, –bzip2:后缀是.bz2形式的压缩
- -J, –xz:后缀是xz形式的压缩
- -z, –gzip:后缀是gz形式的压缩
综上,打包一个文件的命令就是:tar -cvzf file.tar.gz dir
,解压文件的命令就是tar -xvf file.tar.gz
。
我有一点不理解的是,网上的解压命令基本上都是带-z参数的,即tar -xzvf file.tar.gz
,但是我尝试了一下不指定解压器也是能工作的,不知道为什么网上都这么说。到论坛问了一下,原来之前版本的tar是不能自动识别压缩编码的,现在已经可以自动识别了,不需要加zjJ
任何参数了。
zent00 :早期版本的 tar 无法自动判断文件所使用的压缩算法,所以需要指定 z 或 j,现代版本的 tar 都可以识别了,所以不需要指定 z j J
gstqc:压缩必须指定压缩格式
g: gzip
j: bz2
J: xz解压以前需要指定压缩格式,现在新版本不需要,加不加 -a 参数都会自动判断格式
所以对于 gz 格式的解压,在新版 tar 上,以下命令全部等价
tar -zxf
tar zxf
tar -xf
tar xf
tar -axf
tar axf不过,规范一点更好,写脚本的时候,统一使用 tar -zxf 或者 tar -axf 这些参数,免得出 bug
所以还是用Linux比较晚……会遇到一些奇奇怪怪的问题……
zip文件的压缩和解压
另一种跨平台的压缩格式是.zip。这种格式的文件相关的命令是zip
和unzip
。通过下面几个例子了解一下,用的时候查man就可以。
- 递归压缩 zip -r yasuo.zip abc.txt dir1
- 解压 unzip yasuo.zip
- 查看压缩文件内的内容,但是不解压 unzip -v large.zip
- 验证下载文件的正确性 unzip -t large.zip
参考资料
- Linux manual:https://linux.die.net/man/1/tar
- http://www.vixual.net/blog/archives/127
- http://man.linuxde.net/tar
- https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
建议在 Mac OS 上归档的时候,用 –execlude ‘.DS_Store’ 把这种 fork 文件给排除掉。
嗯 还真是,经常在GUI那边归档文件发出去,对方解压发现有个莫名其妙的.DS_Store……