Mutt를 사용하여 폴더의 특정 파일을 보내려고 합니다. 매초마다 사진을 찍고 30초 분량의 사진이 들어 있는 "이미지 캐시"라는 폴더가 있습니다. Mutt를 이용해서 15초짜리 사진을 이메일에 첨부해서 보내주고 싶어요. 이미지당 약 30KiB이므로 이메일에 15KiB를 넣는 것은 문제가 되지 않습니다.
지금까지 나는 이 게시물의 대부분의 코드를 사용해 왔습니다.여기내 파일 시스템과 일치하도록 몇 가지 변경 사항을 적용했습니다.
이것은 내가 사용하는 코드입니다:
#!/bin/bash
DATE=$(date +%F)
MESSAGE="IMAGES"
FILES=$(find /path/to/directory -not -newermt '-15 seconds' | sed 's/ /\\ /g' | grep ".jpg")
if [ -z "$FILES" ]; then
MBODY="No images were found that match search criteria."
echo "$MBODY" | mutt -s "Data files for $TODAY" $EMAILS
fi
echo $MESSAGE | mutt -s "Images taken on $DATE" -a "$FILES" -- [email protected]
이 오류를 뱉어냅니다.
Can't stat /My/Directory/Image1.jpg
/My/Directory/Image2.jpg: No such file or directory
/My/Directory/Image3.jpg: unable to attach file.
어떤 도움이라도 대단히 감사하겠습니다 :). 미리 감사드립니다
답변1
인용했으므로 "$FILES"
단일 문자열을 -a
옵션에 전달하고 있습니다. 거기에 단일 파일을 전달해야 합니다.
당신이 해야 할 일은 파일을 배열에 저장하는 것입니다. 이것은 공백이 포함된 여러 문자열을 처리하는 가장 좋은 방법입니다. 귀하의 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.
# read the output of `find` into an array, one element per line
mapfile -t files < <(find /path/to/directory -name '*.jpg' -not -newermt '-15 seconds')
# ...
echo "$message" | mutt -s "Images taken on $date" -a "${files[@]}" -- [email protected]
# ...................................................^^^^^^^^^^^^^
인수 확장의 정확한 형식으로 인해 각 배열 요소는 명령에서 별도의 단어가 됩니다.
ALLCAPSVARNAMES를 사용하는 습관을 버리십시오. 언젠가는 이를 사용 PATH=...
하고 스크립트가 왜 손상되었는지 궁금해하게 될 것입니다.