inotifywait 监视目录 file_modified: 未找到命令

问题描述 投票:0回答:1

背景

我的用例是监视一个名为 wavs/ 的目录,并在文件关闭时执行 bash 操作(对于初学者,我将使用修改、删除、创建)。每次收到事件时,我都会调用特定于该事件的 bash 函数。

我不需要将参数传递给 shell 脚本来进行测试。我将为每个 inotifywait 事件调用不同的脚本。如上所述,第一个测试是修改、删除、创建事件。

这是我关注的资源,我假设语法在 21-24 之间发生了变化。提前谢谢您!

https://www.baeldung.com/linux/monitor-changes-directory-tree

Bash脚本

#!/bin/bash

file_removed() {
    xmessage "$2 was removed from $1" &
}

file_modified() {
    TIMESTAMP=`date`
    echo "[$TIMESTAMP]: The file $1$2 was modified" >> monitor_log
}

file_created() {
    TIMESTAMP=`date`
    echo "[$TIMESTAMP]: The file $1$2 was created" >> monitor_log
}

inotifywait -q -m -r -e modify,delete,create $1 | while read DIRECTORY EVENT FILE; do
    case $EVENT in
        MODIFY*)
            file_modified "$DIRECTORY" "$FILE"
            ;;
        CREATE*)
            file_created "$DIRECTORY" "$FILE"
            ;;
        DELETE*)
            file_removed "$DIRECTORY" "$FILE"
            ;;
    esac
done

错误

./monitro_file.sh: line 4: file_modified: command not found
./monitro_file.sh: line 4: file_modified: command not found
# repeats several times

系统

Raspberry Pii
    Linux ******* 6.5.0-1010-raspi #13-Ubuntu SMP PREEMPT_DYNAMIC Thu Jan 18 09:08:04 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux

GNU bash, version 5.2.15(1)-release (aarch64-unknown-linux-gnu)

创建测试文件

 arecord -r 16000 -D plughw:1,0 wavs/test.wav

召唤

 ./monitro_file.sh wavs &
tail -f monitor_log
linux ubuntu arm64 inotifywait
1个回答
0
投票

我认为它可能与inotifywait/arm/bash有一些细微差别,所以我大大简化了脚本,这通过了我的接受标准:

inotifywait -r -m -e close "$1" | 
   while read file_path file_event file_name; do 
       echo ${file_path}${file_name} event: ${file_event}
       ./afterchange.sh ${file_path} ${file_name} ${file_event}
   done

召唤

./watch_wavs.sh wavs
© www.soinside.com 2019 - 2024. All rights reserved.