我有一个名为的文件62810501601420200502.swt1
,最后我的日期格式为 20200502,它前面只是一个会变化的随机数(动态)。我想要的是我只想读取文件的日期并通过 shell 脚本创建日志。
例如,如果今天是 20200502,那么我创建日志,其中显示“在服务器中找到文件”,否则,如果未找到该文件,则它只是显示“在服务器上未找到文件”。
在下面的代码中,我前面有一个具有固定名称的文件,因此我能够创建日志和其他内容。
但现在我的文件名可以更改,但日期位置是固定的,文件名长度也是固定的。
#!/bin/sh
###############################################
PU=$(date +%d-%m-%Y)
Date=$(date +%Y-%m-%d)
###############################################
urban="/Path/of/file/PAYMENT_$PU.csv"
###############################################
if [ -f "$urban" ]; then
echo "[$PU] $urban file exist" >> /Mail_Scripts/mail.log
else
echo "[$Date] $urban file does not exist" >> /Scripts/mail.log
echo "$Date,CCB,PAYMENT_$PU.csv,IP" >> /Scripts/iles.csv
fi
###############################################
有什么建议或解决方案吗?
答案1
巴什
如果您使用bash
(shebang 行调用sh
,但问题标记为bash
),那么您可以使用以下代码获取点之前的八个字符:
var=62810501601420200502.swt1
tmp="${var%.*}"
date_string="${tmp: -8}"
sed
与sh
您可以使用sed
:
date_string="$(printf %s "$var" | sed -r 's/^(.*)(.{8})\..*$/\2/')"
grep
或者与grep
:
date_string="$(printf %s "$var" | grep -oP '.{8}(?=\.)')"