我尝试编写脚本来检查文件是否被修改。如果有,它应该echo "Error!",如果没有 - 脚本继续运行。
我的剧本
#!/bin/bash
date=$(stat -c %y)$1
while true
do date2=$(stat -c %y$1)
if (date2 != date)
echo "error!"
done
Run Code Online (Sandbox Code Playgroud)
有任何错误吗?
Bab*_*aba 15
你可以使用inotifywait,阅读更多
inotifywait - 使用 inotify 等待对文件的更改
inotifywait 使用 Linux 的 inotify(7) 接口有效地等待文件更改。它适用于等待来自 shell 脚本的文件更改。它可以在事件发生时退出,也可以在事件发生时继续执行和输出事件。
使用这个命令:
$ inotifywait -m -e modify /tmp/testfile
Run Code Online (Sandbox Code Playgroud)
当我写入时testfile,inotifywait向我发出警报
例如;
echo "bh" > /tmp/testfile
Run Code Online (Sandbox Code Playgroud)
inotifywait 显示此消息:
$ inotifywait -m -e modify /tmp/testfile
Setting up watches.
Watches established.
testfile MODIFY
testfile MODIFY
Run Code Online (Sandbox Code Playgroud)
您也可以将输出重定向到while语句:
while read j
do
echo "file changed"
break
done < <(inotifywait -q -e modify /tmp/testfile)
Run Code Online (Sandbox Code Playgroud)
filename="$1"
m1=$(md5sum "$filename")
while true; do
# md5sum is computationally expensive, so check only once every 10 seconds
sleep 10
m2=$(md5sum "$filename")
if [ "$m1" != "$m2" ] ; then
echo "ERROR: File has changed!" >&2
exit 1
fi
done
Run Code Online (Sandbox Code Playgroud)
考虑使用 md5sum,检查真实文件修改更安全。如果一个文件与另一个文件不同,这个脚本将返回“文件不同”,但是当您均衡时,它会说文件再次相等。
#!/bin/bash
loop1(){
while sleep 1
do
md5f1=$(md5sum "$1" | cut -d' ' -f1)
md5f2=$(md5sum "$2" | cut -d' ' -f1)
if [ "$md5f2" != "$md5f1" ]; then
echo "The files are different now."
#stop loop:
break
fi
done
}
loop2(){
while sleep 1
do
md5f1=$(md5sum "$1" | cut -d' ' -f1)
md5f2=$(md5sum "$2" | cut -d' ' -f1)
if [ "$md5f2" == "$md5f1" ]; then
echo "The files are equal again."
#stop loop:
break
fi
done
}
while true; do
loop1 "$1" "$2"
loop2 "$1" "$2"
done
Run Code Online (Sandbox Code Playgroud)
将其保存为自动比较并运行如下:
./autocompare file1 file2
Run Code Online (Sandbox Code Playgroud)