디렉토리에서 최신 업데이트 파일을 선택하고 이메일을 통해 보냅니다.

디렉토리에서 최신 업데이트 파일을 선택하고 이메일을 통해 보냅니다.

특정 디렉터리에서 최신 오류(타임 스탬프) .log 파일을 선택하여 이메일을 통해 첨부 파일로 보내고 싶습니다. 내가 시도하는 것은 다음과 같습니다.

파일 이름: abc.sh

echo 'An error occured' | mutt -s "Logs" -a '/xx/xx/logs/xx/*.log(.om[1])' -e 'my_hdr From:[email protected]' -- [email protected]

답변1

간단한 솔루션

나는 귀하의 로그 파일 이름이 glob과 일치하고 /xx/xx/logs/xx/*.log귀하가 다음 주소로 메일을 보내고 싶어한다고 가정합니다.[email protected]

newest=$(ls -rt /xx/xx/logs/xx/*.log | tail -n 1)
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

이 방법은 파일 이름이 좋은 경우에 작동합니다. 그러나 일반적으로 구문 분석된 출력 ls은 신뢰할 수 없습니다.

더욱 안정적인 솔루션

이는 사용을 피하고 ls모든 파일 이름에 안전합니다.

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

어떤 파일이 선택되었는지 테스트

이메일로 보내지 않고 어떤 파일이 최신인지 확인하려면 다음을 실행하세요.

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo "newest file is $newest"

관련 정보