在一个脚本中进行多个inotify事件

问题描述

我试图编写一个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

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