You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过管道实现tar文件解包后直接重新打包(不写入磁盘)

正确实现无磁盘解包重打包tar的方法

你之前的命令出错是因为逻辑不匹配:-O参数只会把所有文件的原始内容按顺序输出到stdout,完全丢失了文件名、权限、时间戳这些关键元数据;而-T -是让tar从stdin读取文件名列表,但你传入的是文件内容,两者根本不对应,所以会出现大量错误。

以下是几种正确的实现方式:

方法一:用pax命令(推荐,跨平台)

pax是POSIX标准的归档工具,天生支持通过管道传递完整的归档流,全程不需要写入磁盘,还能保留所有文件元数据:

pax -rf original.tar | pax -wf out.tar

方法二:用GNU tar结合内存临时目录(适合Linux系统)

如果你的系统用的是GNU tar(Linux默认都是),可以利用/dev/shm(基于内存的临时文件系统,不会占用物理磁盘空间)临时存放解包内容,速度极快:

# 创建内存临时目录
tmp_dir=$(mktemp -d -p /dev/shm)
# 解包到内存目录,-p参数保留文件权限
tar xf original.tar -C "$tmp_dir" -p
# 从内存目录重新打包
tar cf out.tar -C "$tmp_dir" .
# 清理临时目录
rm -rf "$tmp_dir"

方法三:过滤文件后重打包(按需使用)

如果只需要重新打包tar里的部分文件(比如只保留.txt后缀),用pax可以直接过滤:

pax -rf original.tar '*.txt' | pax -wf out.tar

内容的提问来源于stack exchange,提问作者coin cheung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:57:54