红联Linux门户
Linux帮助

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

发布时间:2017-06-08 15:54:40来源:linux网站作者:__赵小刚__
一般地,用tar命令解压tar包,tar包中的文件时间戳(mtime, 文件修改时间)会保持不变。
但有时在MacOS上tar一个包,在ubuntu上解压可能存在问题。
在MacOS上目录结构如下:
tar命令解压时文件时间戳不对的问题
 
在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。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31348.html