一个脚本中的多个 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
另一个观察结果:如果在您的任一目录中创建同名文件,存档中的目标将被覆盖。您可能需要考虑一下。
我正在尝试编写 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
另一个观察结果:如果在您的任一目录中创建同名文件,存档中的目标将被覆盖。您可能需要考虑一下。