【问题标题】:linux bash find if not executelinux bash查找如果不执行
【发布时间】:2016-10-18 22:07:56
【问题描述】:

如果在 30 分钟内没有创建目录中的任何文件,我需要创建一个 bash 脚本来运行另一个脚本命令。

我不确定我需要的代码,但如果不匹配,它需要找到并执行。 -

find /folder/to/watch/* if-not 30 mins -exec fixscript.sh 还是什么?

当脚本运行时,我希望它检查文件夹中的文件,如果在过去 30 分钟内没有创建文件,则运行 fixscript.sh

提前致谢

【问题讨论】:

    标签: linux bash if-statement event-handling


    【解决方案1】:

    我认为这不能合并到一个 find 语句中。以下方法可行,但需要注意的是,如果文件被修改,它将被检测为“超过 30 分钟”。

    if [ `find /folder/to/watch -mmin -30 | wc -l` -eq 0 ]; then
        /path/to/fixscript.sh
    fi
    

    Linux/Unix 没有独立的文件创建属性。不过,某些文件系统可能有它,但如果没有 c 代码并调用 stat(),就无法从 shell 访问它。这使用“文件修改”时间戳,不仅文件创建而且文件编辑都会更改。

    汉努

    【讨论】:

    • find /folder/to/watch -mmin -30 | grep -q '.*' || fixscript.sh 会更有效率。无需查看find 产生的多少 输出;我们只需要确定它是否产生任何东西。
    • if [[ -z "$(find ... -print -quit)" ]]; then fixscript.sh; fi 也可以;将find 的输出限制为单个字符串使得捕获它并检查其输出是否为空是可行的。
    【解决方案2】:

    在 Linux 中,您没有创建时间的元数据,而只有上次修改时间、上次文件状态更改和上次访问时间的元数据。

    你可以这样做:

    if test ! [`find "your_file" -mmin +30`]
    then
        `path/to/your/script.sh`
    fi
    

    -mmin 选项为您提供最后修改时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 2018-09-15
      • 2014-12-21
      • 2019-02-22
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多