Bash 脚本以监视文件夹的更改,如果已修改,则将其中的所有项目复制到另一个文件夹

Bash 脚本以监视文件夹的更改,如果已修改,则将其中的所有项目复制到另一个文件夹,bash,macos,shell,terminal,Bash,Macos,Shell,Terminal,有没有办法制作一个bash脚本来监视一个文件夹的更改,如果它曾经被修改过,将其内容复制到另一个文件夹?我认为没有真正“干净”的方法来做到这一点;据我所知,要么你必须让一个观察者在后台持续运行,要么制作一个基于时间间隔的观察者(我不知道脚本中是否有类似OOP的观察者) 因此,如果您想尝试第一个建议,那么您必须创建一个脚本,该脚本以无限循环持续运行,检查文件夹的上次编辑时间并将其存储。如果对其应用了任何更改,那么脚本将注意到上次存储的时间与新存储的时间之间的差异 如果您想做同样的事情,但没有无限循环

有没有办法制作一个bash脚本来监视一个文件夹的更改,如果它曾经被修改过,将其内容复制到另一个文件夹?

我认为没有真正“干净”的方法来做到这一点;据我所知,要么你必须让一个观察者在后台持续运行,要么制作一个基于时间间隔的观察者(我不知道脚本中是否有类似OOP的观察者)

因此,如果您想尝试第一个建议,那么您必须创建一个脚本,该脚本以无限循环持续运行,检查文件夹的上次编辑时间并将其存储。如果对其应用了任何更改,那么脚本将注意到上次存储的时间与新存储的时间之间的差异

如果您想做同样的事情,但没有无限循环,那么可以使用Crontab分配基于间隔的检查。代码将与前一个相同,但您肯定必须将时间存储在文本文件中

然后,您只需再添加一些代码,即可将关注文件夹的内容复制到您选择的另一个目录中


我希望这能对您有所帮助。

如果您不想使用任何工具,您可以编写自己的脚本并在后台运行以进行监视。如果任何文件中的任何内容发生更改,以下方法尝试计算md5hash。你可以通过增加睡眠时间来控制睡眠

monitor.sh

while true
do
    mdhash1=`find /path/to/folder -type f -exec md5sum {} \; | sort -k 2 | md5sum`
    sleep $1 
    mdhash2=`find /path/to/folder -type f -exec md5sum {} \; | sort -k 2 | md5sum`

    if [ "$mdhash1" = "$mdhash2" ]; then
       echo "Identical"
    else
       echo "Different"
       cp -vr /path/to/folder /path/to/destination/
    fi
done
注意:这将导致性能问题

执行

./monitor.sh 2 & 

是的,使用
cron jobs
并定义intervalthx,我会试试!