Linux
檢查動態命名文件中的特定日期並使用 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 ###############################################
有什麼建議或解決方案嗎?
重擊
如果您使用
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}(?=\.)')"