oad*_*ams 31 backup monitoring directory files
有一个目录,A
其内容经常被其他人更改。
我创建了一个个人目录B
,用于保存A
.
目前,我只是偶尔运行rsync
需要的档案从备份A
到B
。不过,我担心一些文件将被添加的可能性A
,然后从取出A
之前,我对他们在复制到机会B
。
防止这种情况发生的最佳方法是什么?理想情况下,我希望每次A
更改内容时都运行当前的备份脚本。
jas*_*yan 37
如果您安装了inotify-tools,您可以inotifywait
在文件或目录写入时触发操作:
#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre modify "$dir1"; do
/run/backup/to/B
done
Run Code Online (Sandbox Code Playgroud)
在这种情况下,-qq
开关完全静默、-r
递归(如果需要)并且-e
是要监视的事件modify
。来自man inotifywait
:
修改
监视文件或监视目录中的文件已写入。
ken*_*orb 12
试试entr
命令行工具,它可以在文件更改时运行任意命令。从 2.9 版本开始,添加了目录监视选项 ( -d
) 以在将新文件添加到目录时对事件做出反应。
如果将新文件添加到项目中,则运行该实用程序的示例:
$ while true; do
> echo src/* | entr -d your_command
> done
Run Code Online (Sandbox Code Playgroud)
在目录监视模式下,每个文件的父目录都隐式添加到监视列表中。
唯一的含义是,如果出现新文件,它必须退出以允许外部 shell 循环重新扫描文件系统。
这是没有目录监视选项的版本:
$ while true; do
> echo src/* src | entr your_command
> done
Run Code Online (Sandbox Code Playgroud)
这是一个更简单的示例,具体取决于您的需要:
$ ls -d * | entr sh -c 'rsync -vuar A B'
Run Code Online (Sandbox Code Playgroud)
查看:eradman.com/entrproject网站了解更多详情。