gzip: 对文件进行压缩;但是会删除源文件

-l:列出压缩文件的相关信息
-c:把解压后的文件输出到标准输出设备
-L:显示版本与版权信息
-d:不显示警告信息
-h:在线帮助
-f:强制覆盖输出文件并压缩链接
-n:解压缩时,若压缩文件内含有远来的文件名称及时间戳记,则将其忽略不予处理
-N:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上
-t:测试压缩文件是否正确无误
-r:递归处理,将指定目录下的所有文件及子目录一并处理
-v:显示指令执行过程
-V:显示版本信息

gzip压缩

[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 21:55 dmxsp
[root@dmxsp dmxsp]# gzip dmxsp
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 26 May 19 21:55 dmxsp.gz

查看压缩包的内容

[root@dmxsp dmxsp]# gzip -l dmxsp.gz
compressed uncompressed ratio uncompressed_name
26 0 0.0% dmxsp

解压

[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 26 May 19 21:55 dmxsp.gz
[root@dmxsp dmxsp]# gzip -dv dmxsp.gz
dmxsp.gz: 0.0% -- replaced with dmxsp
[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 21:55 dmxsp

bzip2: 对文件进行压缩;但是会删除源文件

-c:将数据压缩或解压缩至标准输出
-d:强制解压缩
-z:强制执行压缩
-t:检查指定文件的完整性,但并不对其解压缩。 实际上将对数据进行实验性的解压缩操作,而不输出结果
-f:强制覆盖输出文件。通常 bzip2 不会覆盖已经存在的文件。该选项还强制 bzip2 打破文件的硬连接
-k:在压缩或解压缩时保留输入文件
-q:压制不重要的警告信息。属于 I/O 错误及其它严重事件的信息将不会被压制
-v:详尽模式
-L -V :显示软件版本,许可证条款及条件

bzip2压缩

[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 22:53 dmxsp
[root@dmxsp dmxsp]# bzip2 -z dmxsp
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 14 May 19 22:53 dmxsp.bz2
[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 22:53 dmxsp
[root@dmxsp dmxsp]# bzip2 -kv dmxsp
dmxsp: no data compressed.
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 0 May 19 22:53 dmxsp
-rw-r--r-- 1 root root 14 May 19 22:53 dmxsp.bz2

解压

[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 14 May 19 22:53 dmxsp.bz2
[root@dmxsp dmxsp]# bzip2 -dv dmxsp.bz2
dmxsp.bz2: done
[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 22:53 dmxsp

zip “包路径/包名称” “需要打包的文件或者目录”

unzip解压缩zip文件

zip

-A:自动解压文件
-c:给压缩文件加注释
-d:删除文件
-F:修复损坏文件
-m:压缩完毕后,删除源文件
-q:运行时不显示信息处理信息
-r:处理指定目录和指定目录下的使用子目录
-v:显示信息的处理信息
-x:“文件列表” 压缩时排除文件列表中指定的文件
-y:保留符号链接
-b:<目录> 指定压缩到的目录
-i:<格式> 匹配格式进行压缩
-L:显示版权信息
-t:<日期> 指定压缩文件的日期

unzip

-c:将解压缩的结果显示到屏幕上,并对字符做适当的转换
-f:更新现有的文件
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:<密码> 使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
-d:<目录> 指定文件解压缩后所要存储的目录
-x:<文件> 指定不要处理.zip压缩文件中的哪些文件
-Z unzip -Z等于执行zipinfo指令

 zip压缩

[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 23:33 dmxsp
[root@dmxsp dmxsp]# zip dmxsp.zip dmxsp
adding: dmxsp (stored 0%)
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 0 May 19 23:33 dmxsp
-rw-r--r-- 1 root root 160 May 19 23:43 dmxsp.zip
[root@dmxsp dmxsp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 23:33 dmxsp
[root@dmxsp dmxsp]# zip -m dmxsp.zip dmxsp
adding: dmxsp (stored 0%)
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 160 May 19 23:49 dmxsp.zip

解压

[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 160 May 19 23:49 dmxsp.zip
[root@dmxsp dmxsp]# unzip dmxsp.zip
Archive: dmxsp.zip
extracting: dmxsp
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 0 May 19 23:33 dmxsp
-rw-r--r-- 1 root root 160 May 19 23:49 dmxsp.zip

1. 基本语法(打包多个文件)

zip [选项] 输出文件名.zip [文件1] [文件2] [目录1] ...
  • 核心选项:
    • -r:递归打包目录(必选,否则目录内文件不会被包含)。
    • -v:显示详细打包过程。
    • -q:安静模式(不显示过程,适合脚本)。

2. 常用示例(多个文件 / 目录打包)

  • 打包 file1.txt、file2.jpg、docs/ 目录为 archive.zip:
    zip -rv archive.zip file1.txt file2.jpg docs/
    
    • 输出效果(-v 显示详细信息):
      plaintext
      adding: file1.txt (stored 0%)
      adding: file2.jpg (deflated 10%)
      adding: docs/ (stored 0%)
      adding: docs/readme.txt (deflated 50%)

3. 高级用法

(1)排除文件
用 -x 选项排除不需要的文件(语法与 tar 类似):
zip -rv archive.zip docs/ -x "docs/tmp/*" "*.log"  # 排除 docs/tmp/ 下所有文件和 .log 文件
(2)加密打包(保护多个文件)
用 -e 选项为压缩包设置密码(打包时需输入密码):
zip -erv secret.zip file1.txt private/  # 加密打包 file1.txt 和 private/ 目录
(3)查看打包内容
用 -l 选项列出压缩包内的文件:
unzip -l archive.zip  # 显示 archive.zip 中的所有文件

tar “包路径/包名称” “需要打包的文件或者目录”

-c:创建一个新归档
-d:找出归档和文件系统的差异
-t:列出归档内容
-x:从归档中解出文件
-X:排除多个文件(写入需要排除的文件名称)
-n:归档可检索
--no-check-device:当创建增量归档时不要检查设备号
-k:解压时不要替换存在的文件
--keep-newer-files:不要替换比归档中副本更新的已存在的文件
--overwrite:解压时重写存在的文件
--recursive-unlink:解压目录之前先清除目录层次
--remove-files:在添加文件至归档后删除它们
--exclude=PATTERN:排除以 PATTERN 指定的文件
-U: 在解压要重写的文件之前先删除它们
-W:在写入以后尝试校验归档
-O:解压文件至标准输出
-m:不要解压文件的修改时间
-f:使用归档文件或 ARCHIVE 设备
-M:创建/列出/解压多卷归档文件
-H:创建指定格式的归档
-V:创建带有卷名 TEXT的归档;在列出/解压时,使用 TEXT作为卷名的模式串
-a:使用归档后缀来决定压缩程序
-z:使用gzip压缩归档后的文件(.tar.gz)
-Z:通过compress指令处理备份文件
-j:使用bzip2压缩归档后的文件(.tar.bz2)
-J:使用lzop压缩归档后的文件(tar.xz)
-C:指定解压目录
-h:不建立符号连接,直接复制该连接所指向的原始文件
-k:解开备份文件时,不覆盖已有的文件
-K:从指定的文件开始还原
-v:详细地列出处理的文件
-w:每次操作都要求确认
-czf:打包tar.gz格式
-cjf:打包tar.bz格式
-cJf:打包tar.xz格式
-zxf:解压tar.gz格式
-jxf:解压tar.bz格式
-xf:自动选择解压模式
-tf:查看压缩包内容

tar打包

[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
[root@dmxsp dmxsp]# tar -cjf dmxsp.tar.bz dmxsp
[root@dmxsp dmxsp]# ll
total 8
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
-rw-r--r-- 1 root root 186 May 20 23:25 dmxsp.tar.bz
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
[root@dmxsp dmxsp]# tar -czf dmxsp.tar.gz dmxsp
[root@dmxsp dmxsp]# ll
total 8
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
-rw-r--r-- 1 root root 181 May 21 00:36 dmxsp.tar.gz

解压

[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 186 May 20 23:25 dmxsp.tar.bz
[root@dmxsp dmxsp]# tar xjf dmxsp.tar.bz
[root@dmxsp dmxsp]# ll
total 8
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
-rw-r--r-- 1 root root 186 May 20 23:25 dmxsp.tar.bz
[root@dmxsp dmxsp]# ll
total 4
-rw-r--r-- 1 root root 181 May 21 00:36 dmxsp.tar.gz
[root@dmxsp dmxsp]# tar -zxf dmxsp.tar.gz
[root@dmxsp dmxsp]# ll
total 8
-rw-r--r-- 1 root root 46 May 20 22:35 dmxsp
-rw-r--r-- 1 root root 181 May 21 00:36 dmxsp.tar.gz

排除文件: –exclude=/etc

[root@dmxsp dmxsp]# tar czf etc.tar.gz /etc/ –exclude=etc/passwd –exclude=etc/shadow tar: Removing leading `/’ from member names [root@dmxsp dmxsp]# ll total 10132 -rw-r–r– 1 root root 46 May 20 22:35 dmxsp -rw-r–r– 1 root root 10367387 May 21 00:51 etc.tar.gz

tar 命令可将多个文件 / 目录合并为一个 .tar 包(仅打包),或结合压缩算法(gzip/bzip2/xz)生成压缩包(打包 + 压缩)。处理多个文件时,只需在命令中依次列出目标文件 / 目录即可。

1. 基本语法(打包多个文件)

tar [选项] 输出文件名.tar [文件1] [文件2] [目录1] [目录2] ...
  • 核心选项:
    • -c:创建打包文件(必选,用于 “打包” 操作)。
    • -v:显示打包过程(verbose,可选,方便查看哪些文件被处理)。
    • -f:指定输出的打包文件名(必选,且需紧跟文件名,不能省略)。
    • 压缩选项(可选):-z(gzip 压缩,生成 .tar.gz)、-j(bzip2 压缩,生成 .tar.bz2)、-J(xz 压缩,生成 .tar.xz)。

2. 常用示例(多个文件 / 目录打包)

假设当前目录有以下内容,需要打包:file1.txt(文件)、file2.jpg(文件)、docs/(目录,内含子文件)、data/(目录)。

(1)仅打包(不压缩,生成 .tar)

将多个文件和目录合并为 archive.tar:

tar -cvf archive.tar file1.txt file2.jpg docs/ data/
  • 输出效果(-v 选项会显示被打包的文件):

file1.txt file2.jpg docs/ docs/readme.txt data/ data/log.csv

(2)打包并压缩(常用格式)

根据压缩率和速度需求选择格式:

  • tar.gz(最常用,平衡压缩率和速度):
    tar -zcvf archive.tar.gz file1.txt file2.jpg docs/ data/
    
  • tar.bz2(压缩率略高,速度较慢):
    tar -jcvf archive.tar.bz2 file1.txt file2.jpg docs/ data/
    
  • tar.xz(压缩率最高,速度最慢,适合大文件):
    tar -Jcvf archive.tar.xz file1.txt file2.jpg docs/ data/
    

3. 高级用法(处理多个文件时的实用技巧)

(1)用通配符批量指定文件

如果多个文件有相同前缀 / 后缀,可用通配符(* 匹配任意字符,? 匹配单个字符)简化操作:

  • 打包所有 .txt 文件和 docs/ 目录:
    tar -zcvf txt_files.tar.gz *.txt docs/
    
  • 打包 file1 到 file10 的连续文件:
    tar -cvf files.tar file{1..10}.txt  # 等价于 file1.txt file2.txt ... file10.txt
    

(2)排除不需要的文件 / 目录

打包时跳过临时文件、日志等无关内容,用 –exclude 选项:

  • 打包 docs/ 目录,但排除其中的 tmp/ 子目录和 .log 文件:
    tar -zcvf docs_clean.tar.gz docs/ --exclude "docs/tmp/" --exclude "*.log"
    
  • 注意:–exclude 后面的路径需与打包的源路径匹配(相对路径或绝对路径)。

(3)分卷打包(大文件拆分)

当多个文件总容量较大(如超过 U 盘、网盘限制),可分卷打包,用 -L 选项指定单卷大小(单位:MB 需加 M,GB 加 G):

  • 将多个文件分卷为 100MB 的包(生成 archive.tar.00、archive.tar.01…):
    tar -cvf - file1.txt docs/ data/ | split -b 100M - archive.tar.
    
    • 解压时需先合并分卷:cat archive.tar.* > archive.tar,再正常解压 tar -xvf archive.tar。

(4)保留文件权限和属性

默认 tar 会保留文件权限(读 / 写 / 执行),但如需保留更多属性(如所有者、时间戳),可加 -p 选项(需 root 权限):

sudo tar -zcvpf archive_with_perm.tar.gz file1.txt docs/  # 保留完整权限和属性

(5)查看打包内容(不解压)

用 -t 选项检查多个文件是否已正确打包:

tar -tvf archive.tar.gz # 显示 archive.tar.gz 中所有文件的详细信息(权限、大小等)

 

tar 包的解压选项由压缩格式决定,核心对应关系:

  • 无压缩(.tar):用 -xf(无需额外压缩选项)
  • gzip 压缩(.tar.gz 或 .tgz):用 -z
  • bzip2 压缩(.tar.bz2):用 -j
  • xz 压缩(.tar.xz):用 -J

如果不确定格式,可用 file 命令查看,例如:

file *.tar*  # 查看当前目录下所有tar包的格式

二、解压多个同类型的 tar 包(最常见)

如果多个 tar 包是同一格式(例如全是 .tar.gz),直接用通配符批量处理即可,无需逐个操作。

示例 1:解压所有 .tar.gz 包到当前目录

tar -zxvf *.tar.gz
  • 说明:*.tar.gz 匹配当前目录下所有 .tar.gz 格式的文件,-zxvf 依次对每个包执行解压(-x 解压,-z 对应 gzip,-v 显示过程,-f 指定文件)。

示例 2:解压所有 .tar.bz2 包到指定目录

如果希望将多个包解压到同一个目标目录(如 ./output),用 -C 选项指定目录(需先确保目录存在):

mkdir -p ./output  # 创建目标目录(若不存在)
tar -jxvf *.tar.bz2 -C ./output  # 所有.tar.bz2包解压到output目录

示例 3:解压所有无压缩的 .tar 包

tar -xvf *.tar  # 无压缩格式,无需-z/-j/-J

三、解压多个不同类型的 tar 包(混合格式)

如果多个 tar 包格式不同(例如同时有 .tar.gz、.tar.xz),通配符可能无法直接适配(因为不同格式需要不同选项),此时可用循环遍历,根据文件后缀自动选择解压选项。

方法:用 for 循环批量处理

# 遍历当前目录下所有以.tar开头的文件(如.tar、.tar.gz、.tar.xz等)
for tarfile in *.tar*; do
  # 根据文件后缀判断格式,选择对应选项
  if [[ $tarfile == *.tar.gz || $tarfile == *.tgz ]]; then
    tar -zxvf "$tarfile"  # 处理gzip格式
  elif [[ $tarfile == *.tar.bz2 ]]; then
    tar -jxvf "$tarfile"  # 处理bzip2格式
  elif [[ $tarfile == *.tar.xz ]]; then
    tar -Jxvf "$tarfile"  # 处理xz格式
  elif [[ $tarfile == *.tar ]]; then
    tar -xvf "$tarfile"   # 处理无压缩格式
  else
    echo "跳过非tar文件:$tarfile"  # 非tar包则提示
  fi
done
  • 作用:自动识别每个 tar 包的格式,用对应的选项解压,无需手动区分。
  • 可扩展:若需解压到指定目录,在每个 tar 命令后加 -C 目标目录 即可,例如:
    tar -zxvf "$tarfile" -C ./output  # 解压到output目录
    

四、注意事项

  1. 权限问题:若 tar 包内文件涉及系统目录(如 /usr、/etc),需用 sudo 执行解压,否则可能因权限不足失败。示例:sudo tar -zxvf system_files.tar.gz -C /
  2. 文件覆盖:若多个 tar 包内含同名文件,后解压的包会覆盖先解压的文件。如需保留所有文件,建议先为每个包创建单独目录,再分别解压:
    # 为每个tar包创建同名目录,再解压到对应目录
    for tarfile in *.tar.gz; do
      dirname=${tarfile%.tar.gz}  # 去掉.tar.gz后缀作为目录名
      mkdir -p "$dirname"
      tar -zxvf "$tarfile" -C "$dirname"
    done
    

通配符匹配范围:*.tar* 可能匹配非预期文件(如 .tar.bz2.backup),若需精确匹配,可缩小通配符范围(如 *.tar.gz 仅匹配 gzip 格式)。

 

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。