動的に名前付きファイルで特定の日付を確認し、シェルスクリプトを使用してログアウトを生成します。

動的に名前付きファイルで特定の日付を確認し、シェルスクリプトを使用してログアウトを生成します。

私はファイルと呼ばれるファイルを持って62810501601420200502.swt1おり、最終的に私の日付形式は20200502です。その前には(動的に)変更されるランダムな数字があります。私が望むのは、ファイルの日付を読み、シェルスクリプトを介してログを生成したいということです。

たとえば、今日が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 line callを使用しますshが、質問にタグ付けされていますbash)次のコードを使用すると、ドットの前の8文字を取得できます。

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}(?=\.)')"

関連情報