如何解决在一个脚本中进行多个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
另一个观察结果:如果在您的两个目录中都创建了相同名称的文件,则归档中的目标将被覆盖。您可能需要考虑一下。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。