热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

tar命令解压时文件时间戳不对的问题

为什么80%的码农都做不了架构师?一般地,用tar命令解压tar包,tar包中的文件时间戳(mtime,文件修改时间)会保持不变。但

为什么80%的码农都做不了架构师?>>>   hot3.png

一般地,用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
  • 好吧,一个小坑

转:https://my.oschina.net/2bit/blog/911378



推荐阅读
author-avatar
允思顾我在
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有