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%)
- 输出效果(-v 显示详细信息):
3. 高级用法
(1)排除文件
zip -rv archive.zip docs/ -x "docs/tmp/*" "*.log" # 排除 docs/tmp/ 下所有文件和 .log 文件
(2)加密打包(保护多个文件)
zip -erv secret.zip file1.txt private/ # 加密打包 file1.txt 和 private/ 目录
(3)查看打包内容
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目录
四、注意事项
- 权限问题:若 tar 包内文件涉及系统目录(如 /usr、/etc),需用 sudo 执行解压,否则可能因权限不足失败。示例:sudo tar -zxvf system_files.tar.gz -C /
- 文件覆盖:若多个 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 格式)。