补充说明
pax 由 POSIX 定义,用来取代早期互不兼容的 tar 与 cpio:读取时能自动识别归档格式,写入时可指定 ustar、posix、cpio、gnutar 等格式。它支持长文件名、超过 8GB 的大文件和更精确的时间戳,是跨平台归档脚本的可移植选择。
Linux 上 pax 通常需要单独安装(Debian/Ubuntu 的 pax 包,RHEL 系在 pax 或 spax 包中),并非默认自带。日常打包仍以 tar 更常见;只有在需要严格 POSIX 行为,或在 BSD、Solaris、AIX 之间迁移时才值得使用。
pax 的一大特色是“复制模式”:同时给出 -r 和 -w,可以把目录树直接复制到另一个位置,并保留权限、时间戳和属主,相当于可移植的 cp -a。压缩则依赖外部程序,GNU pax 的 -z、-j 分别调用 gzip 和 bzip2。
语法
pax -w [选项] [-f 归档文件] [文件...] # 写入
pax -r [选项] [-f 归档文件] [模式...] # 读取/解包
pax -r -w [选项] 源... 目标目录 # 复制
选项
-f file:指定归档文件,-表示标准输入或标准输出-v:列出正在处理的文件名-x format:指定格式,如ustar、posix、gnutar、cpio-z/-j:使用 gzip / bzip2 压缩(GNU pax)-p preserve:复制时保留权限、属主和时间戳,e表示全部保留-d:读取时不覆盖已存在的较新文件-0:以 NUL 分隔文件名,配合find -print0-T:从文件读取要处理的路径列表
实例
# 打包目录为 POSIX 格式归档
pax -w -x posix -f backup.tar ./project
# 列出归档内容(既不加 -r 也不加 -w)
pax -f backup.tar -v
# 解包到当前目录,不覆盖更新的文件
pax -r -d -f backup.tar
# 先进入目标目录再解包,避免路径逃逸
mkdir -p /tmp/restore && cd /tmp/restore && pax -r -f /path/backup.tar
# 类似 cp -a 的目录复制
pax -r -w -p e ./src ./dst
# 只解出匹配的文件
pax -r -f backup.tar '*.conf'
# 与 find 配合处理含空格的文件名
find . -name '*.log' -print0 | pax -0 -w -f logs.tar