我需要一个 shell 来监视文件夹中的新文件,我将收到两个文件:x.DONE 和 x.txt,一旦我收到 x.DONE,我需要获取相关的 x.txt 并移出此文件夹并删除.DONE。
有人可以帮帮我吗?
谢谢!
我需要一个 shell 来监视文件夹中的新文件,我将收到两个文件:x.DONE 和 x.txt,一旦我收到 x.DONE,我需要获取相关的 x.txt 并移出此文件夹并删除.DONE。
有人可以帮帮我吗?
谢谢!
请尝试在您希望找到 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
此代码假定 *.DONE.pgp 文件在 *.XML.pgp 文件出现时出现。如果没有,您可以执行以下操作:
if [ -f ${f%%.*}.XML.pgp ]; then
mv ${f%%.*}.XML.pgp destination-directory
else
echo ${f%%.*}.DONE.pgp without ${f%%.*}.XML.pgp detected.
fi
尝试这样做(避免每 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
软件包。