Linux

檢查動態命名文件中的特定日期並使用 shell 腳本創建日誌

  • May 2, 2020

我有一個名為的文件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
###############################################

有什麼建議或解決方​​案嗎?

重擊

如果您使用bash(shebang 行呼叫sh但問題用 標記bash),那麼您可以使用以下程式碼獲取點之前的八個字元:

var=62810501601420200502.swt1
tmp="${var%.*}"
date_string="${tmp: -8}"

sh你可以使用sed

date_string="$(printf %s "$var" | sed -r 's/^(.*)(.{8})\..*$/\2/')"

緊握

或與grep

date_string="$(printf %s "$var" | grep -oP '.{8}(?=\.)')"

引用自:https://unix.stackexchange.com/questions/584036