24시간마다 로그 파일을 이메일로 보내려고 합니다. 현재 나는 이것을 달성하기 위해 mutt를 사용하고 있습니다. 다음과 같이 mutt를 호출할 수 있습니다:
mutt -s "Log" -a file_attachment [email protected]
find 및 mtime을 사용하여 최근에 생성된 파일을 나열할 수 있다는 것을 알고 있지만 디렉터리에서 가장 최근에 생성된 파일을 찾아 이메일 첨부 파일로 보내는 bash 기능을 정의할 수 있기를 원합니다.
어떻게 해야 하나요?
답변1
그리고 zsh
:
mutt -s "Log" -a /path/to/*.log(.om[1]) [email protected]
그 사용zsh
글로벌 예선. 다른 쉘 glob은 이름을 기준으로만 파일 이름을 생성할 수 있지만 glob에서는 zsh
이러한 한정자( (.om[1])
위)를 사용하여 파일 속성(유형, 크기, 시간, 권한...) 또는 기타 기준을 기반으로 선택하여 파일에 영향을 줄 수 있습니다. 다양한 변형이나 선택 범위를 적용하여 순서를 정합니다.
이 경우 다음 한정자를 사용합니다.
.
: 일반 파일만 선택합니다.om
: 수정 시간순으로 정렬(최신순)[1]
: 첫 번째 항목만 선택합니다.
log
glob 에 파일이 없으면 /path/to
glob이 실패하고 명령이 중단됩니다(예상한 대로이지만 다른 쉘은 다르게 작동합니다).
GNUly에서는 이에 상응하는 내용은 다음과 같습니다.
latest=$(
find /path/to -maxdepth 1 -name '*.log' -printf '%T@:%p\0' |
sort -rzg | sed -z 's/^[^:]*://;q'
)
[ -n "$latest" ] &&
mutt -s "Log" -a "$latest" [email protected]
답변2
Get_Attachment_Name ()
{
file_attachment_dir="Whatever you want your directory to be"
file_attachment=`ls -lrt -- "$file_attachment_dir" | grep -v "^[bcdl]"| tail -n 1 | awk '{print $9}'`
}
b, c, d 또는 l로 시작하는 출력 행을 제거하면 블록 특수 파일, 문자 특수 파일, 디렉토리 또는 기호 링크를 보내려는 시도가 제거됩니다.
man ls
출력에서 제외할 수 있는 다른 파일 형식을 확인하세요.