一个脚本中的多个 inotify 事件
Posted
技术标签:
【中文标题】一个脚本中的多个 inotify 事件【英文标题】:Multiple inotify events in one script 【发布时间】:2020-10-28 17:09:39 【问题描述】:我正在尝试编写一个 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
任何指针将不胜感激, 谢谢。
【问题讨论】:
这里没有问题。什么按预期工作?什么没有按预期工作?执行脚本时会发生什么?有任何错误信息吗?请在您的问题中添加更多信息。 因此,当脚本执行时,它会按预期工作,但我想将相同的代码结构添加到同一个脚本中,但要查看不同的目录并将文件也移动到不同的目录 【参考方案1】:当然,这可以通过一些额外的逻辑来完成;警告:这假定任何目标目录都存在于/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 'BEGINFS=OFS="/"print "/opt",$(NF-1),$NF ')"
done
另一个观察:如果在您的任一目录中创建同名文件,存档中的目标将被覆盖。您可能需要考虑一下。
【讨论】:
我明天试试这个,我会告诉你我的进展如何。谢谢 所以它确实按预期工作了?感谢您回来;) 我以此为基准来编辑我需要的内容。谢谢!以上是关于一个脚本中的多个 inotify 事件的主要内容,如果未能解决你的问题,请参考以下文章
Perl Linux::Inotify2 - 不能再响应事件了