此帖已更新,请在下面查找解决方案。
我需要检查文件夹中是否存在文件,但并不总是存在。
我做了这样的脚本:
#!/ bin / sh为 true;do file = / path / to / file 如果[[“” $ file“ = * filename *]] 则 回显” $ file存在“ 否则 回显”不存在“ fi 睡眠3 完成
完美地工作,除了不断重复“ $ file present”这一事实,直到我删除或移动文件为止。我可以在“ echo“ $ file is present”之后插入哪个命令来停止警报,但继续检查该文件(例如,何时该文件再次可用)?
谢谢你。
由于我要等到8个小时才能添加答案,因此我在这里发布了我的解决方案:
无论如何,我已经解决了使用以下脚本的问题:将文件的时间与当前日期进行比较,然后使用“触摸”将日期更改为10秒前:
#!/ bin / sh为 true, 执行 cd $(目录名“ $ 0”) current = $(pwd) cd / boot / home / downloads last = $(ls -t | head -n1) name = $(basename“ $ last “] filedate = $(日期-r” $ last“ +%G%m%d%H%M%S)当前 日期= $(日期+%G%m%d%H%M%S) 如果[” $ filedate“ -eq” $ currentdate“] 然后 回显” $ name“”存在“ touch -d'-10秒'” $ name“ fi 完成
现在可以正常使用,并且与文件名无关!提醒我有关每个新文件的信息,并继续监视该文件夹:-)
为了保留脚本的整个历史记录,下面是iamauser的脚本。我对该脚本进行了一些改进:现在,它会警告我文件夹中的每个新文件(名称,种类等均是如此),并且还会提醒我已删除的文件:-)
#!/ bin / bash cd / boot / home filename = $(ls -t | head -n1) tstamp = $(stat --print“%Y”“ $ filename”)为 true; 如果[[请 prev = $(ls“ / boot / home / Downloads” | tr'\ n''\ n'> /tmp/prev.txt) 检查| $(ls -t / boot / home / Downloads | head -n1)进行检查 !-d“ $ filename”]; 然后 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 /差 alert --idea“ / boot / home / Downloads:$ check是该文件夹中的最新文件。” alert --idea“ / boot / home / Downloads:$丢失了。”; tstamp = $(stat --print“%Y”“ $ filename”) 否则 睡3; 连接 完成
这样的事情可能会起作用。我正在检查文件的timstamp,以检查文件夹中是否有相同文件名的新副本。
#!/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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句