【问题标题】:Retrieving last modified time in OSX Bash script在 OSX Bash 脚本中检索上次修改时间
【发布时间】:2015-04-24 00:08:19
【问题描述】:

对不起,如果这是一个简单的问题,但我是 Bash 脚本的新手,我的 Google 技能让我失望。我正在尝试编写一个脚本,最终将检查目录中每个文件的最后修改时间,如果文件最后修改时间 > 3 天前,则使用 gzip 压缩文件。我目前可以在此处使用我的脚本打印出上次修改时间:

  1 !#/bin/bash
  2 echo "Enter directory"
  3 
  4 read directory
  5 
  6 for entry in "$directory"/*
  7 do
  8      stat -f "%Sm" "$entry"
  9 done

这可以很好地打印出时间:

Randalls-MacBook-Pro:bash_scripts randallbanks$ ./print_last_modified.sh 
./print_last_modified.sh: line 1: !#/bin/bash: No such file or directory
Enter directory
..
Apr  6 13:12:21 2015
Apr 19 18:50:26 2015
Apr 14 11:29:06 2015
Apr  7 12:26:37 2015
Apr 15 16:05:17 2015
Apr  6 16:28:06 2015
Apr  6 12:28:40 2015
Apr  6 12:28:40 2015
Apr  6 12:28:40 2015
Apr  6 12:28:40 2015
Apr 23 17:03:03 2015

但我无法弄清楚如何存储或解析这些内容,以便我可以检查它们的最后修改时间是否是 > 3 天前。我该怎么办?

编辑:额外问题:它显然无法在标题中识别我的 shebang 是怎么回事?

【问题讨论】:

  • 助记解法:shebang 是 hash bang 的缩写,# 是 hash,! 是 bang。因此,shebang 是#!

标签: macos bash


【解决方案1】:

要上次修改 3 天或更长时间前的 gzip 文件,请使用:

find "$directory" -mtime +2 -type f -exec gzip {} \;

如果您的 find 足够现代,请使用:

find "$directory" -mtime +2 -type f -exec gzip {} +

工作原理

  • find "$directory"

    这将启动find$directory 下的目录树中查找文件。

  • -mtime +2

    这会查找修改时间超过 2 天的文件。 (超过 2 意味着三个或更多)。有关find 如何计算四舍五入为天的年龄的详细信息,请参阅man find

  • -type f

    这将限制find 查找常规文件。

  • -exec gzip {} \;

    这会将找到的文件告诉findgzip

【讨论】:

  • 谢谢约翰!我很感激
  • 我能问一下'+2'参数到底在做什么吗?我正在尝试修改它以用于测试目的,以检查大于 2 分钟旧的文件编辑:刚刚看到您的编辑。谢谢!
  • @RandyBanks 顺便说一句,如果你想用分钟计算年龄,你可以使用-mtime。所以,-mtime +2 意味着超过两分钟。
【解决方案2】:

你的shebang是个bangshe。应该是#!;它是!#

OS X(通常是 BSD)上的 find 命令可以满足您的需求。 -newermt 会根据字符串中指定的时间检查修改时间,包括"3 days ago" 等字符串。

所以:

find . -not -newermt "3 days ago" -exec gzip {} \;

【讨论】:

  • 哈哈...呵呵。谢谢肯!
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多