使用 tar
打包文件
tar
:tape archive(磁盘档案卷,因为最初是为了将文件打包在磁带上,所以叫此名)
由于 tar
命令的历史很久远,所以它的参数的配置方式和其他命令有一些不同。
打包文件和目录
$ tar -cf archived_file.tar file1 dir1 # 将 file1 和 dir1 打包成 archived_file.tar
-c
代表创建打包文件(create);-f
后必须紧跟打包文件名(filename),所以上面的命令不能写成tar -fc
。- 注:打包后的文件是一个新文件,源文件不会被替换。打包后的文件大小大于被打包文件的大小的总和,因为打包时
tar
命令会添加一些额外的信息。 - 打包和解包文件时若加
-v
参数,会显示打包或解包过程的详细信息。
解包文件
$ tar -xf archived_file.tar # 将 archived_file.tar 解包
$ tar -xf archived_file.tar -C target_dir # 将 archived_file.tar 解包到指定目录
其他常用操作
$ tar -tf archived_file.tar # 列出 archived_file.tar 中的文件
$ tar -f archived_file.tar --delete filename # 删除 archived_file.tar 中的某个文件
$ tar -f archived_file.tar -r filename # 向 archived_file.tar 中添加文件
$ tar -f archived_file1.tar -A archived_file2.tar # 将 archived_file2.tar 的内容追加到 archived_file1.tar
使用 gzip
和 bzip2
压缩文件
gzip
是 linux 中最常用的压缩命令。
$ gzip file1 file2 # 将 file1 和 file2 分别压缩为 file1.gz 和 file2.gz,并替换源文件
$ gzip -r dir # 递归地压缩 dir 中的所有文件,并替换源文件
$ gzip -d file # 解压文件,并替换源文件
- 使用
-1
~-9
参数可以指定压缩比率,数字越大,压缩程度越高,压缩越慢,压缩后文件越小。若不指定压缩比率,则默认为6
。 gzip
只有压缩功能,不提供打包功能,所以gzip
的操作对象只能是某个文件,即使使用-r
参数,也只是递归地将指定目录中的所有文件单独压缩,并不会连接在一起。bzip2
的用法与gzip
基本相同,只是采用了不同的压缩算法。
使用 tar
打包并压缩文件
tar
命令提供了一个 -z
参数,可以在打包文件的同时调用 gzip
命令来压缩,产生一个 .tar.gz
文件,相当于先使用 tar
打包,再用 gzip
压缩。
$ tar -czf file.tar.gz file1 dir1 # 将 file1 和 dir1 打包并压缩成 file.tar.gz
$ tar -xzf file.tar.gz # 将 file.tar.gz 解压并解包
$ tar -tf file.tar.gz # 列出 file.tar.gz 中的文件。这里的 -z 参数可加可不加。
- 与
-z
参数类似的还有-j
和-J
参数。
如果将上面的-z
参数换成-j
参数,则使用bzip2
压缩,压缩后的文件后缀约定为.tar.bz2
;
如果换成-J
参数,则使用xz
压缩,压缩后的文件后缀约定为.tar.xz
。 - 使用
tar
打包并压缩时,压缩过程的压缩比率为默认值,即6
。
各种压缩格式对比
压缩速度:zip
> tar.gz
> tar.bz2
> rar
> tar.xz
压缩比率:zip
< tar.gz
< tar.bz2
< rar
< tar.xz
除了这个格式外,常见的压缩格式还有 .7z
,对应的压缩工具是 7z
,由于 7z
与 xz
采用了相同的压缩算法,所以压缩后的文件大小基本相同。
zutils
工具包
若想不解压文件而对压缩文件进行某些操作,可以使用 zutils 工具包中的命令:
zcat
:将压缩文件的内容显示在终端上(与cat
命令类似,只不过操作对象是压缩文件)zgrep
:与grep
命令类似,只不过操作对象是压缩文件。
注意:zutils 工具包中的工具只适用于被压缩成 zip
或 gz
格式的单个文本文件。
zutils
主要针对 gz
格式文件,类似的还有 bzip2
提供的 bzutils
工具包和 xz
提供的 xzutils
。