2013-01-04 72 views
1

许多其他问题与此有关的是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.txtd3ab5a等。

+1

您可以使用哪些?蟒蛇? cron的?等等。? – AlG

+0

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

回答

1

也许最简单的是你se标记文件:

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

您可以通过在查找之前存储当前时间,然后使用touch -t – cmh

+1

@cmh来交易假否定的误报:另一种方式是沿着双缓冲线在两个标记文件之间交替。touch a; find -newer b!-newer a; sleep; touch b; find -newer a!-newer b; sleep – PleaseStand

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 
+0

问题是我无法安装任何软件包...... :( – andlrc

+0

@NULL查看我的[更新回答](http:/ /stackoverflow.com/a/14161366/1006989),我修改了它以在没有安装包的情况下获得所需的输出 – 2013-01-04 18:03:56