文档章节

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

__赵小刚__
 __赵小刚__
发布于 2017/05/30 19:41
字数 483
阅读 83
收藏 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
博文 40
码字总数 19077
作品 0
成都
程序员
私信 提问
Linux 系统中文件传输及文件归档

在linux系统中,我们要进行文件的传输,当文件比较多又比较大的时候,我们往往需要 对文件进行处理,以提高传输速率。如下将进行详细的方法介绍,以解决问题。 一、系统中的文件传输 进行两台...

Uniqueh
2017/10/25
0
0
2017-05-06工作小结

自今日起,将每日工作小结写做博客,用来记录工作具体情况,一来记录工作得失,二来警醒自己。 1、线上正式运行的linux服务器要下载程序文件,(程序是phpcmsv9)一般来说是要先压缩文件,然后...

高安宇
2017/05/06
0
0
linux文件归档、压缩与上传、下载

1.文件归档 定义: 2. tarc##创建 二、压缩 gz tar命令仅仅是将多个文件进行同意归档为一个文件,在归档的过程中会将一些应用程序的快捷方式自动的删除,但是gizp命令会将文件压缩,具体操作...

技术小白JDY
2017/10/24
0
0
文件的归档和文件的压缩以及解压

在linux系统中我们经常会进行文件的传输,如果我们对一些大文件不进行相应的处理,那将会消耗我们大量的时间也会带来许多麻烦,因此我们在这一章将会学习到文件的归档压缩以及解压,一些大文...

wx59e701214b276
2018/06/27
0
0
linux下批量解压缩

方法: 第一: for tar in *.tar.gz; do tar xvf $tar; done for tar in *.tar.bz2; do tar xvf $tar; done 第二:用tar命令批量解压某个文件夹下所有的tar.gz文件 ls .tar.gz | xargs -n1 t......

Galy_绿
2016/04/27
61
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
11
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
7
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部