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

Macos 在OSX Bash脚本中检索上次修改的时间,macos,bash,Macos,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 -

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

对于上次修改3天或更多天前的gzip文件,请使用:

find "$directory" -mtime +2 -type f -exec gzip {} \;
如果您的
find
足够现代,请使用:

find "$directory" -mtime +2 -type f -exec gzip {} +
工作原理
  • 查找“$directory”

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

  • -mtime+2

    这将查找修改时间超过2天的文件。(超过2表示三个或更多)。有关
    find
    如何计算四舍五入到天的年龄的详细信息,请参见
    man find

  • -类型f

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

  • -exec gzip{}

    这会告诉
    find
    gzip
    找到的文件


你的舞步就是舞步。它应该是
#;这是
#

OSX(通常是BSD)上的
find
命令可以完成您想要的任务。
-newermt
根据字符串中指定的时间检查修改时间,包括
“3天前”
等字符串

因此:


谢谢你,约翰!我很感激能问一下“+2”参数到底在做什么吗?为了测试的目的,我试图修改它,以检查大于2分钟的文件编辑:刚刚看到您的编辑。谢谢@RandyBanks顺便说一句,如果你想让年龄以分钟为单位,你可以使用
-mtime
。所以,
-mtime+2
意味着超过两分钟。助记符解决方案:shebang是hash bang的缩写,其中
是hash,而
是砰的一声。因此,shebang就是
#。哈哈。。。嗯。谢谢你,肯!
find . -not -newermt "3 days ago" -exec gzip {} \;