【问题标题】:OS X script to send email when new file is created创建新文件时发送电子邮件的 OS X 脚本
【发布时间】:2011-04-30 23:48:09
【问题描述】:

如何监控目录,并在创建新文件时发送电子邮件?

我目前有一个每天运行的脚本,它使用 find 搜索目录中的所有文件,其中 last modified 日期比空的 时间戳 em> 文件:

#!/bin/bash
folderToWatch="/Path/to/files"
files=files.$$
find $folderToWatch/* -newer timestamp -print > $files
if [ -s "$files" ]
then
# SEND THE EMAIL
touch timestamp

不幸的是,这也会在文件被修改时发送电子邮件。我知道创建日期未存储在 Unix 中,但此信息 在 Finder 中可用,所以我能否以某种方式修改我的脚本以使用该信息日期而不是 上次修改时间

【问题讨论】:

    标签: macos scripting unix


    【解决方案1】:

    Snow Leopard 的 find 命令有一个 -Bnewer 主文件,它将文件的“出生时间”(也称为 inode 创建时间)与时间戳文件的修改时间进行比较,因此它应该可以满足您的要求。我不确定添加此功能的确切时间;它在 10.6.4 中,在 10.4.11 中没有,而且我没有方便查看的 10.5 机器。如果您需要它在早期版本上工作,您可以使用stat 来伪造它,如下所示:

    find "$folderToWatch"/* -newer timestamp -print | \
        while IFS="" read file; do
            if [[ $(stat -f %B "$file") > $(stat -f %m timestamp) ]]; then
                printf "%s\n" "$file"
            fi
        done >"$files"
    

    【讨论】:

    • 太棒了!谢谢你。 facepalm 我应该去看手册的。
    【解决方案2】:

    你可以维护一个清单:

    new_manifest=/tmp/new_manifest.$$
    (cd $folderToWatch; find .) > $new_manifest
    diff manifest $new_manifest | perl -ne 'print "$1\n" if m{^> \./(.*)}' > $files
    mv -f $new_manifest manifest
    

    【讨论】:

    • 啊,非常真实!如果“创建日期”属性不可访问,我会走这条路线。
    • 仅供参考,这种方法比“创建日期”更可靠,因为有时可以使用较旧的时间戳创建文件。
    • 我真正关心的唯一文件是通过 FTP 上传的文件,在我的测试中,这些文件都有上传时间的创建日期。但这是一个很好的观点;通过 Finder 传输的任何文件都不会获得新的创建日期。
    【解决方案3】:

    您可能有兴趣查看更改时间。

    if test `find "text.txt" -cmin +120`
    then
        echo old enough
    fi
    

    见:How do i check in bash whether a file was created more than x time ago

    【讨论】:

    • 这应该会出现同样的问题。例如,两周前创建但今天更新的文件仍会显示。
    猜你喜欢
    • 2012-08-14
    • 2011-09-16
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多