请教下如何检测文件是否存在

2020-06-08 14:43:22 +08:00
 jeblur

写了一个非常简单的脚本用于筛选日志并且归档,但是不知道如何写条件来保证输入的日期所对应的日志文件是否存在,比如 5 月份如果并没有日志产生,那希望程序提示并退出

#!/bin/bash

syslog_path="/var/log/dcmc_syslog_devices"

read -p "Enter IP to clear the desired directory: " ip_syslog_path
read -p "Enter desired date to clear[YYYY-MM]: " desired_date

desired_path="/var/log/dcmc_syslog_devices/${ip_syslog_path}"


if [ ! -d ${desired_path} ]; then
	echo "Log directory does not exist! Script exited."
	exit 1
fi

if [ ! -f ${"/var/log/dcmc_syslog_devices/${ip_syslog_path}/${ip_syslog_path}-${desired_date}*.log"}]; then
	echo "Desired log is not available! Script exited."
	exit 1
fi

#Packing syslog
echo $(date +"%Y-%m-%d %H:%M:%S")
echo "Start packing syslogs..."
sudo tar -zcvf ${desired_path}/${ip_syslog_path}-${desired_date}.tar.gz ${desired_path}/${ip_syslog_path}-${desired_date}*.log

由于日志文件最后是包含日期的所以一直使用"*"来覆盖后面的日,现在也不知道怎么修改,但是问题应该在于我的第二个条件中的这种写法是不被支持的,有没有大佬来说下这个该怎么调整啊,感谢!

3690 次点击
所在节点   Bash
2 条回复
jason1121
2020-06-08 15:12:08 +08:00
文件名中干嘛要有星号呢,处理起来不会麻烦么;
这一串 ${"/var/log/dcmc_syslog_devices/${ip_syslog_path}/${ip_syslog_path}-${desired_date}*.log"} 干嘛要用{}括起来,他又不是一个变量,直接 [ ! -f /path/to/file ] 就够了;
而且 ] 前和[ 后是要有一个空格的,你]前也漏了空格
jeblur
2020-06-08 16:03:07 +08:00
@jason1121 感谢回复,上述这串代码其实是从网上找的,只想看看能否有用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX