我们可以在提取 .zip 存档时保留文件的时间戳吗?

我们可以在提取 .zip 存档时保留文件的时间戳吗?

我想解压缩 .zip 存档,并保留提取的文件的时间戳。但此命令不保留时间戳:

unzip my.zip

我看见这篇文章是2011年的,想知道有没有解决办法?

答案1

默认情况下,使用不带 和 参数的 unzip 将提取文件并保留目录结构和时间戳。

您可以使用 -l 参数来获取一个列表,其中将显示文件的时间戳。提取的内容将与您在列表中看到的内容相匹配。

如果您发现尝试打开的 zip 文件有不同之处,您能否向我们展示“-l”列表的输出以及ls -l提取的目录列表?

更新

子文件夹保留 zip 存档的时间戳。但是,如果该文件夹位于顶层,它将丢失原始时间戳并采用提取时的时间戳。

这是一个例子。 Ortho4XP.zip 文件是一个 zip 文件,包含 300 多个文件和子目录。今天是 2017 年 8 月 7 日。正如您从输出中看到的,顶级目录将采用存档解压缩的日期。但是,正如您从输出中看到的那样,其他文件和子目录保留了文件压缩时的时间戳。

ljames@ubunzeus:~/Downloads/open/del/2$ unzip ~/Downloads/Ortho4XP.zip
ljames@ubunzeus:~/Downloads/open/del/2$ ls -lta
total 888
drwxrwxr-x 17 ljames ljames   4096 Aug  7 17:11 .
drwxrwxr-x  3 ljames ljames   4096 Aug  7 17:11 __MACOSX
drwxrwxr-x  2 ljames ljames   4096 Aug  7 17:11 Licence
drwxrwxr-x  2 ljames ljames   4096 Aug  7 17:11 Archives
drwxrwxr-x 12 ljames ljames   4096 Aug  7 17:11 Patches
drwxrwxr-x  3 ljames ljames   4096 Aug  7 17:11 Previews
drwxrwxr-x  3 ljames ljames   4096 Aug  7 17:11 Utils
drwxrwxr-x  5 ljames ljames   4096 Aug  7 17:11 Install
drwxrwxr-x  3 ljames ljames   4096 Aug  7 17:11 Manual
drwxrwxr-x  5 ljames ljames   4096 Aug  7 17:11 bin
drwxrwxr-x  4 ljames ljames   4096 Aug  7 17:11 ..
-rwxr--r--  1 ljames ljames 389049 Feb 24 19:02 Ortho4XP_devel.py
-rwxr--r--  1 ljames ljames 388606 Jan 12  2017 Ortho4XP_v120b.py
-rwxr--r--  1 ljames ljames  36037 Jan 12  2017 Carnet_d_adresses.py
-rwxr--r--  1 ljames ljames   6716 Sep 12  2016 Ortho4XP.cfg
drwxr--r--  2 ljames ljames   4096 Aug 31  2016 OSM_data
drwxr--r--  2 ljames ljames   4096 Aug 31  2016 Tiles
-rwxr--r--  1 ljames ljames  13332 Jul 10  2016 README.install_NOT_UP_TO_DATE
drwxr--r--  2 ljames ljames   4096 Jul 21  2015 Elevation_data
drwxr--r--  2 ljames ljames   4096 Jul 21  2015 Masks
drwxr--r--  2 ljames ljames   4096 Jul 21  2015 Orthophotos
drwxr--r--  2 ljames ljames   4096 Jul 21  2015 tmp
ljames@ubunzeus:~/Downloads/open/del/2$

更新#2

我仍在研究找出不保留存档时间戳的文件夹与保留存档时间戳的文件夹之间的区别。我将很快更新答案以使其更加明确。这可能取决于创建 zip 文件时使用的选项。

答案2

我发现 Busybox 版本unzip在提取时不保留时间戳。

$ bsdtar tvvf a.zip
-rw-r--r--  0 1000   1000        0 Jan  1  2000 a
Archive Format: ZIP 1.0 (uncompressed),  Compression: none
$ busybox unzip a.zip
Archive:  a.zip
  inflating: a
$ ls -nd a
-rw-r--r-- 1 1000 1000 0 Nov 17 13:01 a
$ busybox | head -n1
BusyBox v1.36.1 (Debian 1:1.36.1-3.1+b1) multi-call binary.

相关内容