linux - 如何保留 zip 压缩后原始文件的时间戳?

标签 linux bash shell zip compression

我的服务器上有很多文件,我们使用过滤器压缩这些文件,只有超过 x 天的文件才会被压缩。

zip 命令压缩原始文件,生成文件名.zip 并删除原始文件。 这有一个小问题,即时间戳会发生变化,因为压缩作业在 x 天后运行。

因此,当我们运行文件以删除旧文件(现在是 zip 文件)时,并非所有文件都被删除,因为时间戳已从原始文件更改为压缩文件。

我想添加一个条件,在压缩时,我希望文件的原始时间戳保留在 zip 存档中,即使它在以后运行。

一种方法是

  • 使用日期命令获取每个原始文件的时间戳
  • 压缩原件,去除原件
  • 使用“触摸”将较早存储的时间戳插入新的 zip 文件

我正在寻找更简单的解决方案。

最佳答案

我有一些旧文件:

$ ls -l foo
-rw-r--r-- 1 james james 120 Sep  5 07:28 foo

压缩并重新编辑:

$ zip foo.zip foo && touch -d "$(date -R -r foo)" foo.zip

检查一下:

$ ls -l foo.zip
-rw-r--r-- 1 james james 120 Sep  5 07:28 foo.zip

删除原来的:

$ rm -i foo

关于linux - 如何保留 zip 压缩后原始文件的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46398296/

相关文章:

android - 一个发行版中的 Linux 程序\游戏可以在另一个 Linux 发行版上运行吗?

c - 如何从程序本身获取指向特定可执行文件部分的指针? (也许与 libelf)

ruby-on-rails - Rails Server 在 Ubuntu 上启动失败(之前是在 MAC 上),直接退出

linux - Maven 目录 : Permission denied

bash - 如何在 CURL 命令中传递 POST JSON 数据中的变量值?

linux - 获取 bash 中最后一次 grep 匹配的行

linux - 在 bash 脚本的 until 循环中验证多个表达式

bash - 如何通过 bash 中的变量传递带空格的命令行参数

shell - 如何跟踪 adb shell am start myandroidapp

node.js - 如何在不重新启动进程的情况下更新进程中的 ENV 变量(NodeJS)?