동적으로 명명된 파일에서 특정 날짜를 확인하고 쉘 스크립트를 사용하여 로그아웃을 생성합니다.

동적으로 명명된 파일에서 특정 날짜를 확인하고 쉘 스크립트를 사용하여 로그아웃을 생성합니다.

나는 파일이라는 파일을 가지고 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하지만 질문에 tagged 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}(?=\.)')"

관련 정보