检查动态命名文件中的特定日期并使用 shell 脚本创建注销

检查动态命名文件中的特定日期并使用 shell 脚本创建注销

我有一个名为的文件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}(?=\.)')"

相关内容