0

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

有人可以帮帮我吗?

谢谢!

4

2 回答 2

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

此代码假定 *.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
于 2013-09-27T19:00:20.183 回答
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软件包。

于 2013-09-27T19:20:39.287 回答