Gzip 文件夹,同时保留原始时间戳

Gzip 文件夹,同时保留原始时间戳

我想要对文件夹进行 gzip,并且还想保留该文件夹的原始时间戳。有人可以提出任何解决办法吗?

我尝试了下面提到的代码。我得到 zip 发生时间的时间戳。

tar -zcvf outputFileName folderToCompress

答案1

有几个不同的时间戳在典型的 UNIX 文件系统上,atime, mtime, ctime.您想保留哪一个?

如果您有兴趣保留mtime(这是执行操作时显示的内容ls -l),这已经可以开箱即用,如下所示:

$ date
Wed Dec  2 08:52:36 CET 2020
$ tar --version
tar (GNU tar) 1.32
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

$ find /usr/share/tasksel/ -exec ls -lhad {} +
drwxr-xr-x 3 root root 4.0K Nov  6  2017 /usr/share/tasksel/
drwxr-xr-x 2 root root 4.0K Nov 20 12:21 /usr/share/tasksel/descs
-rw-r--r-- 1 root root 7.9K Nov 14 16:06 /usr/share/tasksel/descs/debian-multimedia-tasks.desc
-rw-r--r-- 1 root root  21K Nov 18 02:40 /usr/share/tasksel/descs/debian-tasks.desc


$ cd /tmp; rm -rf foo.tgz

$ tar czf foo.tgz /usr/share/tasksel/
tar: Removing leading '/' from member names
$ ls -lhan foo.tgz 
-rw-r--r-- 1 1000 1000 4.6K Dec  2 08:54 foo.tgz
$ tar tvf foo.tgz
drwxr-xr-x root/root         0 2017-11-06 09:45 usr/share/tasksel/
drwxr-xr-x root/root         0 2020-11-20 12:21 usr/share/tasksel/descs/
-rw-r--r-- root/root     20596 2020-11-18 02:40 usr/share/tasksel/descs/debian-tasks.desc
-rw-r--r-- root/root      8033 2020-11-14 16:06 usr/share/tasksel/descs/debian-multimedia-tasks.desc
$ tar xf foo.tgz
$ find /tmp/usr/share/tasksel/ -exec ls -lhadn {} + 
drwxr-xr-x 3 1000 1000 4.0K Nov  6  2017 /tmp/usr/share/tasksel/
drwxr-xr-x 2 1000 1000 4.0K Nov 20 12:21 /tmp/usr/share/tasksel/descs
-rw-r--r-- 1 1000 1000 7.9K Nov 14 16:06 /tmp/usr/share/tasksel/descs/debian-multimedia-tasks.desc
-rw-r--r-- 1 1000 1000  21K Nov 18 02:40 /tmp/usr/share/tasksel/descs/debian-tasks.desc

可以看出,所有文件夹和文件的时间戳都保留在 tarball 中(运行命令时tar tvf)以及使用 提取tar xf和检查时ls -l)。到目前为止,它们是“保留的”,因为提取的文件的(修改)时间戳与原始文件的时间戳(“2017 年 11 月和 2020 年 11 月”)匹配,并且与原始文件的时间戳不同。当前的时间(“2020 年 12 月”)。

如果您得到不同的结果,那么很可能您检查时间戳的方法有缺陷。或者您提取到的文件系统不允许修改时间戳。

答案2

如果您希望 tarball 本身具有与您存档的目录相同的时间戳,tar则没有相应的选项,但您可以在事后执行此操作:

touch -r folderToCompress outputFileName

相关内容