在 OSX Bash 脚本中检索上次修改时间



对不起,如果这是一个简单的问题,但我是Bash脚本的新手,我的谷歌技能让我失望了。我正在尝试编写一个脚本,该脚本最终将检查目录中每个文件的上次修改时间,如果文件上次修改> 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 是怎么回事?

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

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 {} ;

    这会告诉find gzip找到的文件。

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

OS X(通常和BSD)上的find命令可以完成您要查找的操作。-newermt根据字符串中指定的时间检查修改时间,包括 "3 days ago" 等字符串。

所以:

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

相关内容

  • 没有找到相关文章

最新更新