특정 디렉터리에서 최신 오류(타임 스탬프) .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"