1

许多其他问题都与 StackOverflow 相关。我没有找到任何结果不使用任何 3rd 方包的地方。

问题是我正在使用 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.txt等。d3ab5a

4

2 回答 2

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
于 2013-01-04T17:14:24.397 回答
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
于 2013-01-04T16:54:38.383 回答