文件打包

文件打包,顾名思义就是将多个文件或者目录合并一个文件包。

这个操作很常见,我们在 Windows 下应该都操作过:右键 -> 发送到 -> 压缩文件夹。那么,在 Linux 下,如何操作呢?

文件打包有多种不同的方式(格式),下面我们一一介绍:

tar

tarUnix 系统上的打包工具,可以将多个文件合并成一个文件,扩展名为 .tar 。该命令最初的设计目的是将文件备份到磁带上( tape archive ),故而得名 tar

为了节省存储空间,通常会对目标文件做进一步的压缩:

../_images/884da110489b727de6a80e90f28eaa7e.png

准确讲,文件 打包压缩 是两个不同的操作。然而现实是,这两个不同的动词经常混用。反正大家都能理解,也就无伤大雅。

打包

先来看看如何打包。

进入 resources 目录,里面有一份开源项目代码 dmi-python 。我们使用 tar 命令对其进行打包:

  1. $ cd resources
  2. $ tar -cf dmi-python.tar dmi-python

其中, -c 参数表示创建文件包(文件归档); -f 指定目标文件名; dmi-python 是待打包目录。命令执行完毕后,得到文件包 dmi-python.tar ,包含 dmi-python 目录下的所有子目录和文件。

列举

有时,需要知道某个文件包到底包含哪些目录和文件。-t 参数可以轻松实现:

  1. $ tar -tf dmi-python.tar
  2. dmi-python/
  3. dmi-python/bin/
  4. dmi-python/README.md
  5. dmi-python/.gitignore
  6. dmi-python/dmi/
  7. dmi-python/.git
  8. dmi-python/dmi/__init__.py
  9. dmi-python/dmi/fetcher/
  10. dmi-python/dmi/parser/
  11. dmi-python/dmi/parser/__init__.py
  12. dmi-python/dmi/parser/type.py
  13. dmi-python/dmi/parser/parser.py
  14. dmi-python/dmi/parser/type_parsers/
  15. dmi-python/dmi/parser/type_parsers/t3_chassis.py
  16. dmi-python/dmi/parser/type_parsers/t4_processor.py
  17. dmi-python/dmi/parser/type_parsers/t127_end_of_table.py
  18. dmi-python/dmi/parser/type_parsers/t11_oem_strings.py
  19. dmi-python/dmi/parser/type_parsers/__init__.py
  20. dmi-python/dmi/parser/type_parsers/all.py
  21. dmi-python/dmi/parser/type_parsers/t0_bios.py
  22. dmi-python/dmi/parser/type_parsers/t32_system_boot.py
  23. dmi-python/dmi/parser/type_parsers/t17_memory_device.py
  24. dmi-python/dmi/parser/type_parsers/t19_memory_array_mapped_address.py
  25. dmi-python/dmi/parser/type_parsers/t126_inactive.py
  26. dmi-python/dmi/parser/type_parsers/t16_physical_memory_array.py
  27. dmi-python/dmi/parser/type_parsers/t2_baseboard.py
  28. dmi-python/dmi/parser/type_parsers/base.py
  29. dmi-python/dmi/parser/type_parsers/t1_system.py
  30. dmi-python/dmi/fetcher/fake.py
  31. dmi-python/dmi/fetcher/__init__.py
  32. dmi-python/dmi/fetcher/windows.py
  33. dmi-python/dmi/fetcher/linux.py
  34. dmi-python/bin/print-dmi-jsonic.py
  35. dmi-python/bin/dmi

压缩

文件包可以进一步进行压缩,以降低存储空间消耗。文件压缩是一个独立的操作,可以通过独立的压缩命令进行压缩。以 gzip 为例:

  1. $ gzip dmi-python.tar

命令执行后,生成新文件 dmi-python.tar.gz ,并删除旧文件 dmi-python.tar 。一般来说,压缩文件 .tar.gz 会比原文件 .tar 小若干甚至十倍。

当然了, tar 命令也支持打包压缩一条龙服务——在打包命令的基础上加上 -z 参数:

  1. $ tar -zcf dmi-python.tar.gz dmi-python

这个命令操作等同于以下两个独立的命令:

  1. $ tar -cf dmi-python.tar dmi-python
  2. $ gzip dmi-python.tar

注意到,压缩文件包扩展名分成两部分,后部分表明压缩方式,前部分表明原文件类型。当然了,对于压缩文件包,扩展名可以进行精简,形成短扩展名:

表格-1 文件包扩展名
长扩展名短扩展名
.tar.bz2.tb2, .tbz, .tbz2
.tar.gz.tgz
.tar.lz
.tar.lzma.tlz
.tar.xz.txz
.tar.Z.tZ

解包

从文件包还原被合并文件的过程称为解包,使用 -x 参数进行:

  1. $ tar -xf dmi-python.tar

对于压缩过的文件包,也是如此:

  1. $ tar -xf dmi-python.tar.gz

对于一些比较老旧的系统,你可能需要分成两步进行操作——先解压缩,再解包:

  1. $ gunzip dmi-python.tar.gz
  2. $ tar -xf dmi-python.tar

rar

RAR 是另一种文件归档压缩格式, 在 Windows 平台上较为多见。Linux 管理员也需要学习 RAR 基本操作,以备不时之需。

安装

Linux 系统一般没有 rar 命名,需要通过包管理工具进行安装,安装方法因发行版而异。

Debian / Ubuntu :

  1. $ apt install rar

打包

执行 a 命令将文件或目录添加到压缩包:

  1. $ rar a dmi-python.rar dmi-python

列举

tar 命令类似, rar 命令也可以列举压缩包包含的目录和文件( l 命令 ):

  1. $ rar l dmi-python.rar

解包

解包一般采用 x 命令,该命令将压缩包内的目录及文件原封不动地解到当前目录:

  1. $ rar x dmi-python.rar

还可以用 e 命令解包,这种方式不保留目录结构,只将文件解到当前目录。如果不同目录下存在同名文件则产生冲突,需要通过覆盖或者忽略解决:

  1. $ rar e dmi-python.rar

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png小菜学编程

参考文献