如何监控文件夹并将文件移出?

时间:2013-09-27 18:58:19

标签: shell

我需要一个shell来监视文件夹中的新文件,我将收到两个文件:x.DONE和x.txt,一旦收到x.DONE,我需要获取相关的x.txt和移出此文件夹并删除.DONE。

有人可以帮帮我吗?

谢谢!

2 个答案:

答案 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包。

相关问题