文件打包¶
文件打包,顾名思义就是将多个文件或者目录合并一个文件包。
这个操作很常见,我们在 Windows 下应该都操作过:右键 -> 发送到 -> 压缩文件夹。 那么,在 Linux 下,如何操作呢?
文件打包有多种不同的方式(格式),下面我们一一介绍:
tar¶
tar 是 Unix 系统上的打包工具,可以将多个文件合并成一个文件,扩展名为 .tar
。
该命令最初的设计目的是将文件备份到磁带上( tape archive
),故而得名 tar 。
为了节省存储空间,通常会对目标文件做进一步的压缩:
准确讲,文件 打包 和 压缩 是两个不同的操作。 然而现实是,这两个不同的动词经常混用。 反正大家都能理解,也就无伤大雅。
打包¶
先来看看如何打包。
进入 resources
目录,里面有一份开源项目代码 dmi-python
。
我们使用 tar 命令对其进行打包:
$ cd resources
$ tar -cf dmi-python.tar dmi-python
其中, -c
参数表示创建文件包(文件归档); -f
指定目标文件名; dmi-python
是待打包目录。
命令执行完毕后,得到文件包 dmi-python.tar
,包含 dmi-python
目录下的所有子目录和文件。
列举¶
有时,需要知道某个文件包到底包含哪些目录和文件。
-t
参数可以轻松实现:
$ tar -tf dmi-python.tar
dmi-python/
dmi-python/bin/
dmi-python/README.md
dmi-python/.gitignore
dmi-python/dmi/
dmi-python/.git
dmi-python/dmi/__init__.py
dmi-python/dmi/fetcher/
dmi-python/dmi/parser/
dmi-python/dmi/parser/__init__.py
dmi-python/dmi/parser/type.py
dmi-python/dmi/parser/parser.py
dmi-python/dmi/parser/type_parsers/
dmi-python/dmi/parser/type_parsers/t3_chassis.py
dmi-python/dmi/parser/type_parsers/t4_processor.py
dmi-python/dmi/parser/type_parsers/t127_end_of_table.py
dmi-python/dmi/parser/type_parsers/t11_oem_strings.py
dmi-python/dmi/parser/type_parsers/__init__.py
dmi-python/dmi/parser/type_parsers/all.py
dmi-python/dmi/parser/type_parsers/t0_bios.py
dmi-python/dmi/parser/type_parsers/t32_system_boot.py
dmi-python/dmi/parser/type_parsers/t17_memory_device.py
dmi-python/dmi/parser/type_parsers/t19_memory_array_mapped_address.py
dmi-python/dmi/parser/type_parsers/t126_inactive.py
dmi-python/dmi/parser/type_parsers/t16_physical_memory_array.py
dmi-python/dmi/parser/type_parsers/t2_baseboard.py
dmi-python/dmi/parser/type_parsers/base.py
dmi-python/dmi/parser/type_parsers/t1_system.py
dmi-python/dmi/fetcher/fake.py
dmi-python/dmi/fetcher/__init__.py
dmi-python/dmi/fetcher/windows.py
dmi-python/dmi/fetcher/linux.py
dmi-python/bin/print-dmi-jsonic.py
dmi-python/bin/dmi
压缩¶
文件包可以进一步进行压缩,以降低存储空间消耗。 文件压缩是一个独立的操作,可以通过独立的压缩命令进行压缩。 以 gzip 为例:
$ gzip dmi-python.tar
命令执行后,生成新文件 dmi-python.tar.gz
,并删除旧文件 dmi-python.tar
。
一般来说,压缩文件 .tar.gz
会比原文件 .tar
小若干甚至十倍。
当然了, tar
命令也支持打包压缩一条龙服务——在打包命令的基础上加上 -z
参数:
$ tar -zcf dmi-python.tar.gz dmi-python
这个命令操作等同于以下两个独立的命令:
$ tar -cf dmi-python.tar dmi-python
$ gzip dmi-python.tar
注意到,压缩文件包扩展名分成两部分,后部分表明压缩方式,前部分表明原文件类型。 当然了,对于压缩文件包,扩展名可以进行精简,形成短扩展名:
长扩展名 | 短扩展名 |
---|---|
.tar.bz2 | .tb2, .tbz, .tbz2 |
.tar.gz | .tgz |
.tar.lz | |
.tar.lzma | .tlz |
.tar.xz | .txz |
.tar.Z | .tZ |
解包¶
从文件包还原被合并文件的过程称为解包,使用 -x
参数进行:
$ tar -xf dmi-python.tar
对于压缩过的文件包,也是如此:
$ tar -xf dmi-python.tar.gz
对于一些比较老旧的系统,你可能需要分成两步进行操作——先解压缩,再解包:
$ gunzip dmi-python.tar.gz
$ tar -xf dmi-python.tar