检查文件是否已更新

时间:2014-11-03 19:11:23

标签: bash

我正在尝试检查是否在循环中使用'stat'命令更新了文件(在本例中为/ var / log / messages)。但是代码永远不会退出循环并因某种原因继续运行。

#!/bin/bash 
check='/var/log/messages'

THEN="stat -c %z ${check}"
NOW="stat -c %z ${check}"

while [ $"NOW" == $"THEN" ]
do 

    echo "$NOW"
if [ $"NOW" != $"THEN" ]; then 
    echo "${check} has been updated."

if 

done

对此的想法?有没有更简单的方法来查看/ var / log / messages是否已更改?

2 个答案:

答案 0 :(得分:1)

美元符号必须在报价范围内。 $"..."是一种用于翻译的特殊引用机制,因此,除非您使用NOWTHEN转换为相同字符串的语言环境,否则该条件永远不会成立。

if [ "$NOW" == "$THEN" ]; then

答案 1 :(得分:0)

首先,下面的版本至少执行stat命令以及上面解释的所有更改。你需要考虑的一件事是当时和现在几乎总是相同的,除非消息的更新时间少于执行时间

#!/bin/bash
check='/var/log/messages'

THEN=`stat -c %z ${check}`
NOW=`stat -c %z ${check}`

if [ "$NOW" == "$THEN" ]; then

    echo "$NOW"
elif [ "$NOW" != "$THEN" ]; then
    echo "$check has been updated."
fi
~   

请注意统计数据正在执行。