【问题标题】:Using inotifywait to process two files in parallel使用 inotifywait 并行处理两个文件
【发布时间】:2016-07-02 19:52:55
【问题描述】:

我正在使用:

inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
cp -p "$file" /path/to/other/directory
done

监控文件夹的文件完成情况,然后将其移动到另一个文件夹。

文件是成对制作的,但在不同的时间制作,即 File1_001.txt 在下午 3 点制作,File1_002.txt 在晚上 9 点制作。我想监控这两个文件的完成情况,然后启动一个脚本。

script.sh File1_001.txt File1_002.txt

所以我需要另一个 inotifywait 命令或不同的实用程序,它也可以识别两个文件都存在并完成,然后启动脚本。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我不太了解您的要求或您的挑战是什么;在我看来,您可以只启动两次等待循环,每个文件一次。也就是说,this answer 可能会为您提供替代策略。请注意,使用该答案您的问题中的脚本摘录,如果文件名中包含非标准字符(如空格或换行符或其他控制字符),您可能会遇到失败。
  • @ghoti 说了什么;你的要求很模糊。
  • @ghoti 谢谢,我已经更新了我的问题以尝试更清楚。我需要等待由分隔符分隔的两个文件都关闭,然后将两个文件名都传递给一个新脚本。意思是,应该传递 File1_001.txt 和 File1_002.txt,即使 File2_001.txt 在 File1_002.txt 之前完成。
  • 如果它们是相隔 6 小时创建的,则延迟不会成为问题,因此,如果您在 cron 中每 10 分钟检查 2 个文件并运行脚本(如果两者都存在),则不会那足够好吗?你必须对创建过程有一定的了解,知道它每分钟写一次或类似的东西,所以如果修改时间超过2分钟,你就可以知道它已经写完了。

标签: linux bash monitoring inotifywait


【解决方案1】:

我发现了一个安装了inotifywait 的Linux 机器,所以现在我明白了它的作用和工作原理。 :)

这是你需要的吗?

#!/bin/bash

if [ "$1" = "-v" ]; then
        Verbose=true
        shift
else
        Verbose=false
fi

file1="$1"
file2="$2"

$Verbose && printf 'Waiting for %s and %s.\n' "$file1" "$file2"

got1=false
got2=false
while read thisfile; do
        $Verbose && printf ">> $thisfile"
        case "$thisfile" in
                $file1) got1=true; $Verbose && printf "... it's a match!" ;;
                $file2) got2=true; $Verbose && printf "... it's a match!" ;;
        esac
        $Verbose && printf '\n'
        if $got1 && $got2; then
                $Verbose && printf 'Saw both files.\n'
                break
        fi
done < <(inotifywait -m -q -e close_write --format %f .)

这会运行单个 inotifywait,但会在循环中解析其输出,当看到命令行上的两个文件($1$2)都已更新时,该循环会退出。

请注意,如果一个文件已关闭,然后在第二个文件关闭时重新打开,此脚本显然不会检测到打开的文件。但这在您的用例中可能不是问题。

请注意,构建解决方案的方法有很多种——我只向您展示了一种。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2012-06-22
    • 2013-04-24
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多