OS X脚本在创建新文件时发送电子邮件

时间:2010-10-26 21:03:12

标签: macos scripting unix

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

我目前有一个每天运行的脚本,它使用 find 搜索目录中上次修改日期比空时间戳更新的所有文件 file:

#!/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中可用,所以我能以某种方式修改我的脚本以使用该信息日期而不是上次修改吗?

3 个答案:

答案 0 :(得分:1)

您可以维护清单:

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

答案 1 :(得分: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"

答案 2 :(得分:0)

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

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