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

时间:2015-04-24 00:08:20

标签: macos bash

很抱歉,如果这是一个简单的问题,但我是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是什么?

2 个答案:

答案 0 :(得分:1)

要修改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意味着三个或更多)。有关man find如何计算年龄四舍五入到天的详细信息,请参阅find

  • -type f

    这会限制find寻找常规文件。

  • -exec gzip {} \;

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

答案 1 :(得分:1)

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

OS X上的!#命令(通常是BSD)可以执行您要查找的内容。 find根据字符串中指定的时间检查修改时间,包括-newermt等字符串。

所以:

"3 days ago"
相关问题