Суффикс имени файла после последней точки может иметь ${file##*.}
.
В этом случае, однако, я бы рассмотрел возможность распаковки и кодирования uuen с помощью 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)" abc@gmail.com
done' sh {} +
Таким образом, вы бы поддерживали пути с пробелами и другими неприятными символами. Скрипт sh -c
также не хранит несжатые файлы, а распаковывает их, uuencodes и отправляет за один раз.
Я также добавил обработку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)" abc@gmail.com
done' sh {} +