2

本帖已更新,请看下面的解决方案。

我需要检查文件夹中是否存在文件,该文件并不总是存在。

我做了一个这样的脚本:

#!/bin/sh
虽然是真的;做
文件=/路径/到/文件
如果 [[ "$file" = *文件名* ]]
然后
echo "$ 文件存在"
别的
回声“没有礼物”
菲
睡觉 3
完毕

完美运行,除了“$file is present”不断重复,直到我删除或移动文件。我可以在 "echo "$file is present" 之后插入哪个命令来停止警报但继续检查这个文件(例如,当文件再次可用时)?

谢谢你。

由于我要到 8 小时才能添加答案,所以我在这里发布我的解决方案:

无论如何,我已经使用此脚本解决了:将文件的时间与当前日期进行比较,然后使用“触摸”将日期更改为 10 秒前:

    #!/bin/sh
    虽然是真的
    做
    cd $(目录名 "$0")
    当前=$(密码)
    cd /boot/home/下载
    最后=$(ls -t | 头 -n1)
    name=$(basename "$last")
    文件日期=$(日期 -r "$last" +%G%m%d%H%M%S)
    当前日期=$(日期+%G%m%d%H%M%S)
    if [ "$filedate" -eq "$currentdate" ]
    然后
    echo "$name" "存在"
    touch -d '-10 seconds' "$name"
    菲
    完毕

现在可以根据文件名独立工作!提醒我每个新文件一次,并继续关注该文件夹:-)

为了保留脚本的整个历史,下面是 iamauser 的脚本。我对这个脚本做了一些改进:现在它会提醒我文件夹中的每个新文件(独立于名称、种类等),并提醒我删除文件:-)

    #!/bin/bash                                                                                                                                                                                         
    cd /启动/主页

    文件名=$(ls -t | 头 -n1)                                                                                                                                                                                     
    tstamp=$(stat --print "%Y" "$filename")                                                                                                                                                            
    虽然是真的;做
    prev=$(ls "/boot/home/Downloads" | tr '\n' '\n' > /tmp/prev.txt)
    检查=$(ls -t /boot/home/Downloads | head -n1)

     如果 [ !-d "$文件名" ]; 然后
    after=$(ls "/boot/home/Downloads" | tr '\n' '\n' > /tmp/after.txt)

            echo "不存在";
            睡觉 5;                                                                                                                                                    
        elif [[ "$filename" == "$filename" && $tstamp -ne $(stat --print "%Y" "$filename") ]]; 然后
    睡觉 2
    差异=$(comm -2 -3 "/tmp/after.txt" "/tmp/prev.txt">/tmp/Diff.txt)
    丢失=$(cat /boot/common/cache/tmp/Diff.txt)                                                                                                              
            alert --idea "/boot/home/Downloads: $check 是此文件夹中最新的文件。";
            alert --idea "/boot/home/Downloads: $lost 已删除。";                                                                                                                                                                 
            tstamp=$(stat --print "%Y" "$filename")                                                                                                                                                        
        别的                                                                                                                                                                                            
            睡觉 3;                                                                                                                                                                                    
        菲                                                                                                                                                                                              
    完毕

4

2 回答 2

1

这样的事情可能会奏效。我正在检查文件的时间戳以检查文件夹中是否有相同文件名的新副本。

#!/bin/bash                                                                                                                                                                                         

filename="/path/to/file"                                                                                                                                                                                     
tstamp=$(stat --print "%Y" "$file")                                                                                                                                                                 
while true; do                                                                                                                                                                                      
    if [ ! -f "$filename" ]; then                                                                                                                                                                       
        echo "Not present";
        sleep 5;                                                                                                                                                             
    elif [[ "$filename" == "myfile" && $tstamp -ne $(stat --print "%Y" "$filename") ]]; then                                                                                                              
        echo "$filename is present";                                                                                                                                                                    
        tstamp=$(stat --print "%Y" "$filename")                                                                                                                                                         
    else                                                                                                                                                                                            
        sleep 3;                                                                                                                                                                                    
    fi                                                                                                                                                                                              
done   

我通过在脚本运行时触摸文件名来测试脚本,每次触摸时,它都会打印$filename is present.

于 2013-09-01T03:42:21.567 回答
0

当然,konsolebox;你是对的。如果我添加睡眠以减少 CPU 使用率,我的脚本也不完美。无论如何,也许,我错过了来自 iamauser 的脚本的某些内容: 上面的脚本在文件不存在时打印回显,但在存在时不打印回显.. 为什么?

无论如何,由于我想尝试,我也在考虑另一种方法:使用“ls -1 | wc -l”检查文件夹中的文件数,添加一个新文件并且文件数为+ 1 比“ls -1 | wc -l” ,因此,我可以从文件名中单独收到警报。如果有任何名称的文件,脚本应该提醒我一次,同时继续检查新的文件夹中的文件。还有什么建议吗?

谢谢!

更新

好的:这是脚本的最终修订版:当一个新文件写入文件夹时,此脚本会提醒我。如果我删除此文件,脚本会提醒我该文件夹中存在的最新文件。非常好,因为这是我一直在寻找的 :-)

自从我在 Haiku 上,我也将“echo”替换为 alert,一个警告窗口,一种图形“echo”。

    #!/bin/bash                                                                                                                                                                                         
    cd /启动/主页

    文件名=$(ls -t | 头 -n1)                                                                                                                                                                                     
    tstamp=$(stat --print "%Y" "$filename")                                                                                                                                                            
    虽然是真的;做

    检查=$(ls -t /boot/home/Downloads | head -n1)                                                                                                                                                                                          
        如果 [ !-d "$文件名" ]; 然后                                                                                                                                                                       
            echo "不存在";
            睡觉 5;                                                                                                                                                             
        elif [[ "$filename" == "$filename" && $tstamp -ne $(stat --print "%Y" "$filename") ]]; 然后                                                                                                              
            alert --idea "/boot/home/Downloads: $check 是此文件夹中最新的文件";                                                                                                                                                                    
            tstamp=$(stat --print "%Y" "$filename")                                                                                                                                                        
        别的                                                                                                                                                                                            
            睡觉 3;                                                                                                                                                                                    
        菲                                                                                                                                                                                              
    完毕

于 2013-09-01T19:12:06.410 回答