我使用拖放来复制和移动文件。这样做的一个缺点是文件可能会被放到错误的地方。因此,假设我将许多文件和文件夹复制/移动到多个不同的目的地。
我如何才能追踪所有内容的最终位置,以确保所有内容都被复制/移动到正确的位置?
答案1
您所要求的是“文件系统观察器”。
我看
iWatch 是一个实时文件系统监控程序。它是一个简单的 perl 脚本,用于监控特定目录/文件中的更改并立即发送电子邮件通知。它从 xml 配置文件中读取目录/文件列表,并且需要内核中的 inotify 支持(Linux 内核 >= 2.6.13)。
还有更多,但这似乎是最简单的方法,是 Ubuntu 原生的方法,使用 inotify(因此它不会占用系统)。
iWatch 有两种方式:
- 命令行
- 守护进程
一些用于日志记录的命令行选项:
-m <email address>
Specify the contact point's email address. Without this option, iwatch will
not send any email notification.
-s <on|off>
Enable or disable reports to the syslog (default is off/disabled)
iwatch /tmp
使用默认事件监视 /tmp 目录中的变化
iwatch -r -e access,create -m cahya@localhost -x /etc/mail /etc
仅监控访问并以 /etc/mail 为例外递归方式在 /etc 目录中创建事件,并向 cahya@localhost 发送电子邮件通知。
iwatch -r -c "(w;ps -ef)|mail -s '%f was changed' cahya@localhost" /bin
递归监视/bin 目录并执行命令。
iwatch -r -X '\.svn' ~/projects
递归监视 ~/projects 目录,但排除其中的任何 .svn 目录。这不能通过常规的“-x”选项完成,因为“-x”只能排除定义的路径。
示例配置文件使用守护进程模式时。日志记录通过配置文件中的 XML 选项完成:
<config>
<guard email="myadmin@localhost" name="IWatch"></guard>
<watchlist>
<title>Public Website</title>
<contactpoint email="webmaster@localhost" name="Web Master"/>
<path type="single">/var/www/localhost/htdocs</path>
<path type="single" syslog="on">/var/www/localhost/htdocs/About</path>
<path type="recursive">/var/www/localhost/htdocs/Photos</path>
</watchlist>
<watchlist>
<title>Operating System</title>
<contactpoint email="admin@localhost" name="Administrator"/>
<path type="recursive">/etc/apache2</path>
<path type="single">/etc/passwd</path>
<path type="recursive">/etc/mail</path>
<path type="exception">/etc/mail/statistics</path>
<path type="single" filter="shadow|passwd">/etc</path>
</watchlist>
<watchlist>
<title>Only Test</title>
<contactpoint email="root@localhost" name="Administrator"/>
<path type="single" alert="off" exec="(w;ps -ef)|mail -s %f
root@localhost">/tmp/dir1</path>
<path type="single" events="access,close" alert="off" exec="(w;ps -ef)|mail -s %f
root@localhost">/tmp/dir2</path>
<path type="single" events="default,access" alert="off" exec="(w;ps -ef)|mail -s '%f is
accessed' root@localhost">/tmp/dir3</path>
<path type="single" events="all_events" alert="off">/tmp/dir4</path>
</watchlist>
</config>
使用此配置,iwatch 将监视单个目录/var/www/localhost/htdocs
(不包括其子目录),并且任何通知都将发送到联系点 webmaster@localhost。但它将监视整个目录树/etc/apache2
,包括在 IWatch 启动后稍后创建的任何子目录。如果您不想收到受监视目录中的文件或子目录的通知,也可以在此处创建例外。