여러 파일을 첨부하면 Unix 메일에서 첨부 파일이 손실됩니다.

여러 파일을 첨부하면 Unix 메일에서 첨부 파일이 손실됩니다.

나는 명령의 결과인 여러 파일을 Unix에 추가하려고 합니다 find. 이메일을 보내려고 하면 첨부 파일이 누락되었습니다.

dir=$path
echo "Entered into $spr/sum_master"
for fil in `find $dir -ctime -2 -type f -name "Sum*pdf*"`
do
  uFiles=`echo "$uFiles ; uuencode $fil  $fil"`
done
\($uFiles\) | mailx -s "subject" [email protected]

이 코드에 어떤 문제가 있나요?

답변1

마지막 줄은 매개변수를 취하고 uFiles문자열이 포함되면 명령 을 실행합니다 . 이로 인해 오류 메시지 (또는 이와 유사한) 가 표시되고 빈 입력이 발생합니다.foo bar qux(foobarqux)(foo: command not foundmail

스크립트의 문제는 이뿐만이 아닙니다. 변수를 작성하는 명령은 uFiles여러분이 생각하는 것과 전혀 작동하지 않습니다. 실행하여 bash -x /path/to/script스크립트의 흔적을 확인하면 무슨 일이 일어나고 있는지 알 수 있습니다. 명령을 실행하는 대신 명령을 echo실행 하고 있습니다 . 거기에는 uuencode필요하지 않습니다 echo.

  uFiles="$uFiles
  $(uuencode "$fil" "$fil")"

이렇게 하면 루프가 작동하지만 특히 깨지기 쉽습니다. 공백 및 기타 특수 문자가 포함된 파일 이름이 손상됩니다(참조).공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?자세한 설명은) 구문 분석된 출력은 find작업을 수행하는 가장 쉬운 방법은 아닙니다. 대신 find실행하려는 명령을 실행하라고 지시하세요.

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;

그 출력은 빌드하려는 uuencoded 파일을 연결한 것입니다. 다음 항목에 직접 입력으로 전달할 수 있습니다 mail.

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; |
mailx -s "subject" [email protected]

uuencode 단계의 잠재적인 실패를 감지하려면 이를 변수에 채울 수 있습니다(단, 변수가 매우 클 수 있다는 점에 유의하세요).

attachments=$(find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;)
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if [ -z "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
echo "$attachments" | mailx -s "subject" [email protected]

또는 임시 파일에 쓰십시오.

attachments=
trap 'rm -f "$attachments"' EXIT HUP INT TERM
attachments=$(mktemp)
find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; >"$attachments"
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if ! [ -s "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
mailx -s "subject" [email protected] <"$attachments"

관련 정보