我创建了这个脚本,用于检查给定位置是否存在特定文件。但是当我运行它时它始终显示
失败 - 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
答案 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