我想要对文件夹进行 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