Linux 对于每个文件修改,将其复制到另一个文件bash中
我想运行服务来监听文件修改,并在每次添加到文件时将其从文件中删除并附加到另一个文件中 我试过这段代码,但它不能像无限循环一样工作Linux 对于每个文件修改,将其复制到另一个文件bash中,linux,bash,inotifywait,Linux,Bash,Inotifywait,我想运行服务来监听文件修改,并在每次添加到文件时将其从文件中删除并附加到另一个文件中 我试过这段代码,但它不能像无限循环一样工作 inotifywait -m -e modify "$1" | while read folder eventlist eventfile do cat "$1">>$DESTINATION_FILE >$1 done 每次截断文件时,都会注册为修改,从而触发另一次截断,等等。请尝试测
inotifywait -m -e modify "$1" |
while read folder eventlist eventfile
do
cat "$1">>$DESTINATION_FILE
>$1
done
每次截断文件时,都会注册为修改,从而触发另一次截断,等等。请尝试测试文件是否包含循环体中的任何内容
inotifywait -m -e modify "$1" |
while read folder eventlist eventfile
do
# Only copy-and-clear if the file is not empty
if [ -s "$1" ]; then
cat "$1" >> "$DESTINATION_FILE"
# What if the file is modified here?
>$1
fi
done
请参阅我在
cat
和截断之间的注释。您永远不会将这些修改放在$DESTINATION_文件中
,因为您会在循环的下一次迭代之前删除它们。这并不是完全可以避免的,除非您的操作系统允许您在cat
之前获得$1
上的锁,然后在截断后释放锁,这样一次只能有一个进程写入文件。每次截断文件时,该进程会注册为修改,从而触发另一次截断,等等。尝试测试文件在循环体中是否包含任何内容
inotifywait -m -e modify "$1" |
while read folder eventlist eventfile
do
# Only copy-and-clear if the file is not empty
if [ -s "$1" ]; then
cat "$1" >> "$DESTINATION_FILE"
# What if the file is modified here?
>$1
fi
done
请参阅我在
cat
和截断之间的注释。您永远不会将这些修改放在$DESTINATION_文件中
,因为您会在循环的下一次迭代之前删除它们。这并不是真的可以避免的,除非您的操作系统允许您在cat
之前获得$1
上的锁,然后在截断后释放锁,这样一次只能有一个进程写入文件。正如chepner所指出的,恢复更改也将被视为文件修改
解决办法是:
注2:可能存在原子性问题。有时不监视文件修改。因此,当此
cat>
操作或cp
操作正在进行时,可能有人试图写入“$1”
文件,这将丢失。正如chepner所指出的,恢复更改也将被视为文件修改
解决办法是:
注2:可能存在原子性问题。有时不监视文件修改。因此,当此
cat>
操作或cp
操作正在进行时,可能有人试图写入“$1”
文件,但该文件将丢失。为什么要这样做?基本上可以对许多文件进行修改,每次修改都要将差异附加到$DESTINATION\u文件
?为什么要这样做?对许多文件进行修改基本上,每次修改都要将差异附加到$DESTINATION\u文件
?