我需要一个shell来监视文件夹中的新文件,我将收到两个文件:x.DONE和x.txt,一旦收到x.DONE,我需要获取相关的x.txt和移出此文件夹并删除.DONE。
有人可以帮帮我吗?
谢谢!
答案 0 :(得分:1)
请尝试在您希望找到x.DONE的目录中运行此行:
while [ ! -f *.DONE.pgp ]; do sleep 1 ; done ; for f in *.DONE.pgp ; do mv ${f%%.*}.XML.pgp destination-directory ; rm ${f%%.*}.DONE.pgp ; done
为了使这段代码更清楚,理解这不是一个单一的:
while [ ! -f *.DONE.pgp ]; do sleep 1 ; done
for f in *.DONE.pgp ; do
mv ${f%%.*}.XML.pgp destination-directory
rm ${f%%.*}.DONE.pgp
done
此代码假定在* .XML.pgp文件中出现* .DONE.pgp文件。 如果没有,你可以这样做:
if [ -f ${f%%.*}.XML.pgp ]; then
mv ${f%%.*}.XML.pgp destination-directory
else
echo ${f%%.*}.DONE.pgp without ${f%%.*}.XML.pgp detected.
fi
答案 1 :(得分:1)
尝试这样做(避免每N秒轮询一次):
#!/bin/bash
inotifywait -m . | while read dir event file; do
[[ $event == CLOSE_WRITE* && "$file" =~ (x|DONE).txt ]] && case "$file" in
x.txt) file_content="$(<x.txt)" ;;
DONE.txt) mv x.txt /tmp; rm DONE.txt ;;
esac
来自http://en.wikipedia.org/wiki/Inotify:
一个主要用途是在Beagle等桌面搜索实用程序中,其功能允许重新编制已更改文件的索引,而无需每隔几分钟扫描文件系统进行更改,效率非常低。
对于像发行版这样的红帽,请查看inotify-tools
包。