文件监控Bash脚本

时间:2016-06-28 21:37:28

标签: linux bash shell scripting

我创建了这个脚本,用于检查给定位置是否存在特定文件。但是当我运行它时它始终显示

失败 - Flag_lms_device_info_20160628.txt不存在
失败 - Flag_lms_weekly_usage_info_20160628不存在

但两个文件都存在。

 PREFIX="/opt/data"
 REPORT="/tmp/report.txt"
 DATE=$( date -d "${dtd} -1 days" +'%Y%m%d' )

    rm -f "$REPORT"

                FILENAME="Flag_lms_device_info_${DATE}.txt"
                FULLFN="$PREFIX/$FILENAME"
                if [ -f "$FULLFN" ]; then
                        echo "OK - $FILENAME exists" >> $REPORT
                else
                        echo "Failed - $FILENAME do not exist" >> $REPORT
                fi

                FILENAME="Flag_lms_weekly_usage_info_${DATE}.txt"
                FULLFN="$PREFIX/$FILENAME"
                if [ -f "$FULLFN" ]; then
                        echo "OK - $FILENAME exists" >> $REPORT
                else
                        echo "Failed - $FILENAME do not exist" >> $REPORT
                fi

2 个答案:

答案 0 :(得分:1)

if [ -f "find "$FULLFN" -type f -name "$FILENAME"" ];then

在此检查是否存在名为find的奇怪文件...使用反引号

if [ -f `find "$FULLFN" -type f -name "$FILENAME"` ];then

或,在bash中,

if [ -f $(find "$FULLFN" -type f -name "$FILENAME") ];then

将命令的输出作为字符串。

此外,您的find调用看起来并不乐观。如果您需要在Flag_lms_device and so forth下的某处找到名为/opt/data/的文件,请使用find "$PREFIX" -type f -name "$FILENAME"。如果您确定/opt/data是确切位置,请使用

if [ -f "$FULLFN" ]

并且您不需要find该文件。

答案 1 :(得分:1)

首先,你的问题中有一个奇怪的输出:你的第二行输出缺少.txt扩展名。这可能是一个意外,但如果它不值得调查。

假设你的日期命令工作正常(我不知道那个特定的命令),我会减少你对变量的使用。另外,我会使用-e test运算符而不是-f,因为它更具包容性。 (如果您还没有将数据放入文件中,即使文件存在,-f也可能返回错误。):

REPORT="/tmp/report.txt"
DATE=$( date -d "${dtd} -1 days" +'%Y%m%d' )

echo "" > "$REPORT" # Wipes file instead of completely removing it

            filename="/opt/data/Flag_lms_device_info_$DATE.txt"                
            if [ -e "$filename" ]; then

                    echo "OK - Flag_lms_device_info_$DATE.txt exists" >> $REPORT
            else
                    echo "Failed - Flag_lms_device_info_$DATE.txt doesn't exist" >> $REPORT
            fi


            filename="/opt/data/Flag_lms_weekly_usage_info_$DATE.txt"
            if [ -e "$filename" ]; then

                    echo "OK - Flag_lms_weekly_usage_info_$DATE.txt exists" >> $REPORT
            else
                    echo "Failed - Flag_lms_weekly_usage_info_$DATE.txt doesn't exist" >> $REPORT
            fi