bash 脚本 inotifywait 在继续之前等待文件完全写入
bash script inotifywait wait for file completely written before proceding
我正在尝试设置一个监视脚本和一个 pdf 合并脚本的串联来检查我的扫描仪将 pdf 写入到的文件夹。第一个脚本的想法是监视文件夹,直到出现两个 pdf,然后调用第二个脚本。
现在的问题是 inotifywait 检测文件何时按预期创建并调用第二个脚本,但特别是对于较大的 pdf,这会导致失败,因为扫描仪可能仍会写入 pdf。我将 close_write 事件添加到 inotifywait,但我认为这会被忽略,因为创建事件已经为真。我添加了一个睡眠作为解决方法,但这不仅很难看,而且在超过固定超时的更大文件上也会失败。检查两个文件是否已完全写入的最佳方法是什么。谢谢。
文件夹检查脚本:
#! /bin/bash
n=0
inotifywait -m -e create,close_write | while read line
do
n=$(find -type f | wc -l);
echo $n
if [ "$n" -eq "2" ] ; then
echo "found $n files"
sleep 5
./pdfMergeMove.sh cleanup
n=0
fi;
done
正如 pacholik close_write 指出的那样,仅事件选项就足够了:
inotifywait -m -e close_write | while read line
我正在尝试设置一个监视脚本和一个 pdf 合并脚本的串联来检查我的扫描仪将 pdf 写入到的文件夹。第一个脚本的想法是监视文件夹,直到出现两个 pdf,然后调用第二个脚本。 现在的问题是 inotifywait 检测文件何时按预期创建并调用第二个脚本,但特别是对于较大的 pdf,这会导致失败,因为扫描仪可能仍会写入 pdf。我将 close_write 事件添加到 inotifywait,但我认为这会被忽略,因为创建事件已经为真。我添加了一个睡眠作为解决方法,但这不仅很难看,而且在超过固定超时的更大文件上也会失败。检查两个文件是否已完全写入的最佳方法是什么。谢谢。
文件夹检查脚本:
#! /bin/bash
n=0
inotifywait -m -e create,close_write | while read line
do
n=$(find -type f | wc -l);
echo $n
if [ "$n" -eq "2" ] ; then
echo "found $n files"
sleep 5
./pdfMergeMove.sh cleanup
n=0
fi;
done
正如 pacholik close_write 指出的那样,仅事件选项就足够了:
inotifywait -m -e close_write | while read line