![파일이 압축되었는지 확인](https://rvso.com/image/38697/%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%95%95%EC%B6%95%EB%90%98%EC%97%88%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8.png)
파일이 압축되었는지 여부를 스크립트에서 찾아야 합니다. 압축된 경우 파일 uncompress
을 attachement
. 내 find 명령으로 인해 두 개의 파일이 생성되고 sum12.pdf.Z
내 sum23.pdf.Z
스크립트는 다음과 같습니다.
dir=/home/as1234/bills
cd $dir
for file in `find . -ctime -1 -type f -name "Sum*pdf*"`
do
if [ ${file: -1} == "Z" ]; then
echo "$file is Zipped"
uncompress $file
uuencode $file
fi
done
uuencode $file $file | mailx -s "subject" [email protected]
이 스크립트를 실행했을 때 다음과 같은 오류가 발생했습니다.
${file: -1}: 0403-011 The specified substitution is not valid for this command.
을 사용하고 있습니다 ksh
.
답변1
마지막 점 뒤의 파일 이름 접미사는 ${file##*.}
.
하지만 이 경우에는 다음과 같이 직접 압축 해제 및 uuencoding을 수행하는 것이 좋습니다 find -exec
.
#!/bin/sh
dir=/home/as1234/bills
find "$dir" -type f -ctime -1 -name "Sum*.pdf*" -exec sh -c '
for pathname do
filename=$( basename "${pathname%.pdf*}.pdf" )
if [ "${pathname##*.}" = "Z" ]; then
uncompress -c "$pathname"
elif [ "${pathname##*.}" = "gz" ]; then
gzip -cd "$pathname"
else
cat "$pathname"
fi |
uuencode "$filename" |
mailx -s "subject ($filename)" [email protected]
done' sh {} +
이렇게 하면 공백이나 기타 문제가 되는 문자가 포함된 경로 이름을 지원할 수 있습니다. 또한 스크립트 sh -c
는 압축되지 않은 파일을 저장하지 않고 압축을 풀고 uuencode하여 한 번에 보냅니다.
또한 -압축 파일 처리도 추가했습니다 gzip
.
관련된:
다중 및 명령문 대신 sh -c
사용하여 스크립트 를 대체적으로 구현합니다 .case ... esac
if
elif
find "$dir" -type f -ctime -1 -name "Sum*.pdf*" -exec sh -c '
for pathname do
filename=$( basename "${pathname%.pdf*}.pdf" )
case $pathname in
*.Z) uncompress -c "$pathname" ;;
*.gz) gzip -cd "$pathname" ;;
*) cat "$pathname"
esac |
uuencode "$filename" |
mailx -s "subject ($filename)" [email protected]
done' sh {} +