我想检查目录是否包含文件(例如 sample.txt)。如果 5 小时内不包含该文件,那么我需要执行某些操作。如何在脚本中执行此操作?
我尝试了这个:
if=$(find /home/Savio/Dsktop/check -type f -Sample.txt "*.txt") )
我需要使用哪些命令?
答案1
statox 建议的上述 shell 脚本当然是正确的,但是它没有考虑到计算机可能在两次检查之间关闭,或者您可能会注销,或者您可能会中断运行脚本的 ssh 会话。
确保自己不会同时发生所有这些事件的最简单方法是使用在命令来及时执行第二次检查。因此我建议将上述脚本修改如下:
#!/bin/bash
FILE=/home/Savio/Dsktop/check/sample.txt
if [ -f $FILE ]
then
#Do what you want if file exists
else
at now + 5 hours /home/Savio/ExecutableScript
fi
在哪里/主页/Savio/ExecutableScript是一个可执行脚本 (*chmod 755 ExecutableScript),用于检查文件是否存在示例.txt如果不存在,则采取适当的措施,因为知道 5 小时的时间间隔已经过去。
我知道大多数人不熟悉现在 + 5 小时格式在调用,你可能会发现它详细这里。
以上内容在重启,注销,断开连接后仍然有效。
编辑:在命令特别有用,因为它使用你的环境,不是根的。另外,请记住在使用标准 Bourne shell什,而不是 Bourne-again shell狂欢。因此,在文件 /home/Savio/ExecutableScript 中,请确保明确指定 bash shell,以使其按预期工作。
答案2
你可以使用类似的东西
#!/bin/bash
FILE=/home/Savio/Dsktop/check/sample.txt
if [ -f $FILE ]
then
#Do what you want if file exists
else
sleep 5h
if [ ! -f $FILE ]
then
#Do what you want if the file still doesn't exists
fi
fi
该变量$FILE
包含您正在寻找的文件的路径,可以修改它以搜索其他文件。
测试if [ ! -f $FILE ]
使用-f
参数“测试文件是否存在”。
您需要的延迟是通过 实现的sleep 5h
。 Sleep 允许暂停脚本。如果您在数字后不提供后缀,则时间将被解释为秒,但您也可以使用后缀s
、m
和h
将d
时间设置为秒、分钟、小时或天。
编辑 :这种方法的问题在于它无法在重启或断开连接后继续存在,请参阅@MariusMatutiae 的答案以获得更强大的解决方案。