tar命令解压时文件时间戳不对的问题
tar命令解压时文件时间戳不对的问题
__赵小刚__ 发表于12个月前
tar命令解压时文件时间戳不对的问题
  • 发表于 12个月前
  • 阅读 33
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

一般地,用tar命令解压tar包,tar包中的文件时间戳(mtime, 文件修改时间)会保持不变。

但有时在MacOS上tar一个包,在ubuntu上解压可能存在问题。

在MacOS上目录结构如下

0
├── a
│   └── aa
└── b
    └── bb

在MacOS上执行 tar cvf 0.tar 0/ (注意tar时文件、目录的顺序,在ubuntu上执行时顺序不一样)

# tar --version
bsdtar 2.8.3 - libarchive 2.8.3
# tar cvf 0.tar 0/
a 0
a 0/a
a 0/b
a 0/b/bb
a 0/a/aa

将这个0.tar scp到一个ubuntu(14.04)的环境用tar命令解压时发现0/a这个目录的时间戳不对

通过strace能看到ubuntu上的tar解压0.tar的步骤大概是

  • 读到记录0 创建 目录0
  • 读到记录0/a 创建 目录0/a
  • 读到记录0/b 修改 目录0/a 的时间戳(因为认为之后不会出现0/a/*)  创建 目录0/b
  • 读到记录0/b/bb 创建 文件0/b/bb 并修改其时间戳(下略)
  • 读到记录0/a/aa 修改 目录0/b 的时间戳 创建 文件0/a/aa (此时 目录0/a 的修改时间被修改)
  • 修改 目录0 的时间戳

在ubuntu上tar的顺序

# tar --version
tar (GNU tar) 1.27.1
# tar cvf 0.tar 0
0/
0/b/
0/b/bb
0/a/
0/a/aa

如果tar文件是上面的顺序,解压时不会出现时间戳不一样的问题。

  • MacOS上用tar压缩和解压不会有时间戳的问题
  • ubuntu上用tar压缩和解压不会有时间戳的问题
  • MacOS上tar的包交给ubuntu解压可能有时间戳的问题
  • 这个问题跟不同版本的tar的默认行为有关系,和OS无关,我的MacOS上tar版本是bsdtar 2.8.3,ubuntu上tar的版本是GNU tar 1.27.1
  • 好吧,一个小坑
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 5
博文 24
码字总数 19021
×
__赵小刚__
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: