一个脚本中的多个 inotify 事件

Multiple inotify events in one script

我正在尝试编写 bash 脚本(作为服务安装)来监视多个目录并将在该目录中创建的任何文件移动到另一个目录。例如,我想将在 /home/test/directory1 中创建的任何文件移动到 /opt/directory1,但我也想将在 /home/test/directory2 中创建的所有文件移动到 /opt/directory2,但都在一个脚本中作为运行 服务。到目前为止,这是我的脚本;

#/bin/bash

directory=/home/test/directory1
archive=/home/test/archive
target=/opt/directory1

inotifywait -m "$directory" --format '%w%f' -e create |
    while read file; do
        cp "$file" "$archive"
        mv "$file" "$target"
    done

任何指点将不胜感激, 谢谢

当然,这可以通过一些额外的逻辑来实现;警告:这假设任何目标目录都存在于 /home/test/opt 下,并且它们的名称匹配。

#!/bin/bash
# we use an array to store the watched directories
directories=(/home/test/directory5 /home/test/directory6)
archive="/home/test/archive"
target="/opt"
inotifywait -m --format '%w%f' -r -e create "${directories[@]/#/}" | 
    while read spotted; 
        do
            cp "${spotted}" "$archive"
            mv "${spotted}" "$( echo ${spotted}|awk 'BEGIN{FS=OFS="/"}{print "/opt",$(NF-1),$NF }')"
        done

另一个观察结果:如果在您的任一目录中创建同名文件,存档中的目标将被覆盖。您可能需要考虑一下。