bash 脚本 inotifywait 在继续之前等待文件完全写入

Posted

技术标签:

【中文标题】bash 脚本 inotifywait 在继续之前等待文件完全写入【英文标题】:bash script inotifywait wait for file completely written before proceding 【发布时间】:2017-10-03 10:49:41 【问题描述】:

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

文件夹检查脚本:

#! /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 

【问题讨论】:

只试close_write 好的,成功了-谢谢 【参考方案1】:

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

inotifywait -m -e close_write $1 | while read line

【讨论】:

以上是关于bash 脚本 inotifywait 在继续之前等待文件完全写入的主要内容,如果未能解决你的问题,请参考以下文章

inotifywait 未在 bash 脚本中执行 while 循环

`inotifywait` 不会在带有 `-e delete_self` 的 bash 脚本中终止;但在交互式外壳中

在 bash 中使用 inotifywait 监视文件夹以进行队列

在运行脚本之前使用 inotifywait (或替代方法)等待 rsync 传输完成?

如何在不使用 inotifywait 的情况下监视目录的文件更改?

do 循环的 Bash 脚本,用于检测经过的时间段然后继续