所以我喜欢跟踪添加的文件以及编辑的文件。
find /home/user/public_html -type f -mtime -6 ! -path '*/exclude1*' ! -path '*/exclude2/etc*' -exec ls -ls {} \; | mail -e -s "File Monitor Report" [email protected]
这正是我需要的,但我需要它添加更改的内容(E 编辑 N 新 D 删除)或类似的东西。
现在这个问题已经被问了很多次了,答案总是一样的:fswatch inotify auditd 或其他包。这不是一个选项,因为它是一个 cpanel 共享托管服务器,我没有这个权限。
所以我正在寻找最简单的方法来做到这一点或接近它。
git 可用,但据我所知,您需要让存储库提交更改等,它不会扫描文件夹来查找它们。此外,它还需要可编写脚本
简而言之,只需要一个尽可能简单的脚本来每天邮寄更改
答案1
您实际上是在要求一个版本控制系统,比如 Git。
您可以自己动手,通过创建一个 cronjob 将所有文件复制到“prev”目录并通过电子邮件发送给您diff -r
,但这实际上是 VCS 已经更高效且通常更省力地完成的事情,因此您不妨使用它。
git 可用,但据我所知,我知道您需要让存储库提交更改等,它不会为它们扫描文件夹。
只要你要求,它就会执行。这实际上是任何版本控制系统的核心功能之一:告诉你提交之间发生了什么变化,以及告诉你自上次提交以来发生了什么变化(即尚未提交的内容)。
因此,如果您在 public_html 中有一个存储库,您只需执行git status
或git diff
查看更改。特别是,--name-status
会向您显示 A(添加)/M(修改)/D(删除)文件的列表,就像您要求的那样。同样的方法可以应用于显示提交之间更改的命令。
此外,它还需要可编写脚本
每个版本控制系统都是可编写脚本的。Git 尤其具有可编写脚本的特性,以至于它的许多面向用户的命令过去(有时现在仍然是)只是围绕低级命令的 shell 脚本。
大多数其他版本控制系统也可编写脚本至少直到做出提交并向您显示更改摘要(您要求的 Add/Mod/Del 输出通常实际上是默认输出,例如hg status
或svn status
)。
你的 cronjob 基本上是:
cd ~user/public_html
git add --all
git commit -m "Daily snapshot"
# Output the changes for cronmail
git show --name-status
# ...and output the whole diff as well.
git show --stat