监视目录以获取没有第三方包的更改

时间:2013-01-04 16:48:02

标签: linux bash shell unix ubuntu

围绕StackOverflow,还有很多其他问题。我没有找到任何结果不使用任何第三方包的地方。

问题是我正在使用Hetzner,他们希望允许我安装任何软件包。

我可以使用PHP,Python,Java(几乎认为是标准集合)

  

如何监视新文件的目录(递归)并将引用引入另一个文件。

我尝试过这样的事情:

while true; do
    last=`cat log.txt`
    find "$UPLOAD_FOLDER"'/.' -type f > 'log.txt'
    now=`cat log.txt`

    diff -n <(echo "$last") <(echo "$now") >> 'queue.txt'

    sleep 60;
done;

但它不可靠,并且使用queue.txtd3a等污染b5a

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用标记文件:

touch markerFile
while true
do
    find "$UPLOAD_FOLDER"'/.' -type f -newer markerFile >> 'queue.txt'
    touch markerFile
    sleep 60
done

在发现和触摸之间可能会出现轻微的竞争条件吗?

评论中建议的更复杂的双缓冲解决方案:

touch markerFileA
touch markerFileB
while true
do
    touch markerFileB
    find "$UPLOAD_FOLDER"'/.' -type f -newer markerFileA ! -newer markerFileB >> 'queue.txt'
    sleep 60
    touch markerFileA
    find "$UPLOAD_FOLDER"'/.' -type f -newer markerFileB ! -newer markerFileA >> 'queue.txt'
    sleep 60
done

答案 1 :(得分:0)

您可以使用sed删除不需要的输出:

while :; do

    find "$UPLOAD_FOLDER/." -type f > "log1.txt"

    if [ -f "log2.txt" ]; then
        diff log1.txt log2.txt | sed '/^[^<]/d;s/^< //'

        fi

    mv "log1.txt" "log2.txt"

    sleep 60

done