bash 脚本 inotifywait 等待文件完全写入后再继续

Mik*_*ike 5 pdf bash inotify

我正在尝试设置一个监视脚本和一个 pdf 合并脚本的串联来检查我的扫描仪写入 pdf 的文件夹。第一个脚本的想法是监视文件夹,直到出现两个 pdf 文件,然后调用第二个脚本。现在的问题是 inotifywait 检测到文件何时创建并且按预期调用第二个脚本,但特别是对于较大的 pdf,这会导致失败,因为扫描仪可能仍会写入 pdf。我将 close_write 事件添加到 inotifywait 但我认为这会被忽略,因为 create 事件已经是 true。我添加了睡眠作为解决方法,但这不仅丑陋,而且在超过固定超时的更大文件上也会失败。检查两个文件是否已完全写入的最佳方法是什么?谢谢。

文件夹检查脚本:

#! /bin/bash
n=0
inotifywait -m -e create,close_write $1 | while read line
do
    n=$(find $1 -type f | wc -l);
    echo $n
    if [ "$n" -eq "2" ] ; then 
      echo "found $n files"
      sleep 5
      ./pdfMergeMove.sh $1 cleanup
      n=0
    fi;
done 
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 6

正如pacholik close_write所指出的,仅事件选项就足够了:

inotifywait -m -e close_write $1 | while read line
Run Code Online (Sandbox Code Playgroud)