跟踪每日目录更改(并通过电子邮件发送)

跟踪每日目录更改(并通过电子邮件发送)

我有一个 Debian 支持的 NAS 服务器 (ReadyNAS),具有很深的文件层次结构。我希望每天收到有关其某些目录及其子目录中发生的更改的通知。

因此,如果有人在白天不小心删除了文件,我会在晚上收到电子邮件通知(其中包含所有更改的摘要),并在第二天早上从备份中恢复文件。

起初我想编写一个 PHP CL 或 Python 脚本来递归扫描目录,但后来我想也许有一些简洁的 unix 工具可以做得更好。类似 dirmp 的东西:)

你会怎么做?

谢谢

答案1

跑步绊线作为夜间工作。

或者,将整个系统置于版本控制之下。运行版本控制工具的diff命令以查看更改及其恢复命令(无论其名称如何)以恢复本地副本中的任何更改。请注意,大多数版本控制系统处理文件内容,但需要对元数据(例如权限)进行额外的工作。

或者,使用具有某种形式的快照支持的存储系统,例如 LVM 或虚拟机。

或者,为什么不首先使用阻止所有更改呢?

答案2

您可以编写一个执行类似操作的脚本(未经测试,抱歉)并将其放入 crontab 中:

#!/bin/bash

# whom to mail
mailto="[email protected]"

# what directory to look in
dir="/somewhere/else"

# make the directory safer to embed in filenames
dirname=$(echo $dir | tr "/" "-" | tail -c +2)

# today's date, add hours & minutes if you want to run it more often
today=$(date +"%Y%m%d")

# yesterday's date
yesterday=$(date -d -1day +"%Y%m%d")

# filenames
todayfile=$dirname-$today.files.bz2
yesterdayfile=$dirname-$yesterday.files.bz2

# the business. Use find -printf if you want to capture additional metadata.
find $dir |sort |bzip2 > $todayfile

if [ -r $yesterdayfile ]; then
    bzdiff $yesterdayfile $todayfile | mail $mailto -s "Directory differences for $dir from $yesterday to $today" 
else
    echo "No file listing from $yesterday, can't produce report | mail $mailto -s "Unable to report directory differences for $dir, no report from $yesterday"
fi 

或者你可以只是使用我的产品这使得这种事情变得非常容易。 :)

【已经没有这样的产品了,抱歉】

答案3

使用 BTRFS,您可以安装实时快照文件系统,其中“存储”所有更改的文件。

相关内容