修改提取文件夹的时间

修改提取文件夹的时间

我刚刚(今天31-jan-2019)下载了一些随机的 source.tar.gz 并提取了它。当我stat对生成的文件夹进行操作时,我看到:

Access: 2019-01-31 10:37:26.308991485 +0100
Modify: 2018-11-18 00:02:35.000000000 +0100
Change: 2019-01-31 10:36:03.881185889 +0100
 Birth: -

修改日期已经过去了,在我拥有笔记本电脑之前。有人可以解释一下这个时间戳有什么用吗?

这是非常不直观的,我希望所有时间(更改/访问/修改)都限制在我的文件系统生命周期内。 (也是最有用的日期之一,即特定文件/文件夹首次出现的时间,不存在,但是是的,我知道我可以通过ext4上的出生是空的

答案1

我的答案基于 GNU tar,为此该手册可在此处获取

tar创建存档时保留文件的修改时间。这允许tar执行取决于文件时间戳的某些操作。

  1. 第一个用途是“更新”操作:

-u,--update

追加比存档中相应副本更新的文件。

从手册中:

--update操作通过将指定归档成员的日期与同名文件的日期进行比较来更新 tar 归档。如果该文件的修改时间比存档成员更新,则该文件的较新版本将添加到存档中(与 一样--append)。

请注意,更新操作实际上会导致文件被附加,而不是被覆盖。这是由于历史原因,即写入磁带中间部分的困难。

  1. 第二种用途是提取磁盘上已存在的文件的存档。如果现有文件较新,您可以使用tar以下选项要求保留它--keep-newer-files

--保留较新的文件

不要替换比其存档副本更新的现有文件。

  1. tar档案最初用于在磁带上方便地存储文件。从长期存储的角度来看,tar存档可以代表一组文件在特定时间点的状态。从逻辑上讲,这应该包括该存档内容的时间戳。修改时间戳是文件内容修改时间的可靠衡量标准,而不是 atime(如果您读取文件,它会发生变化)或 ctime(当 tar “修复”提取文件上的任何元数据时,它可能会发生变化)。

  2. 由于修改时间存在于存档内部,因此您还可以使用-d/--diff选项将该信息与现有文件系统上的文件进行比较:

( ), or操作将指定的存档成员与同名的文件进行比较,然后报告文件大小、模式、所有者、修改日期和内容的差异--compare-d--diff

最后,如果您确实需要在提取存档时忽略修改时间戳,则-m/--touch选项可以做到这一点:

-m,--touch

不提取数据修改时间。使用此选项时,tar 会将其提取的文件的数据修改时间保留为提取文件的时间,而不是将其设置为存档中记录的时间。

答案2

使用 GNU,tar您可以提取存档的内容并将修改时间设置为当前日期/时间

tar --touch -xvf source.tar.gz

这应该能让你实现你所寻求的。

默认行为是默认行为。我总是希望将mtime文件的 被设置为其上次更新的实例,无论它来自哪个服务器,也无论包含文件系统是在哪里创建的。实用程序rsync(部分)依赖于比较服务器和文件系统之间的时间戳的能力。

相关内容