我正在尝试使用 Mutt 发送文件夹中的特定文件。我有一个名为“图像缓存”的文件夹,每秒拍摄一张照片,其中有 30 秒的照片。我想使用 Mutt 将 15 秒的图片作为附件放入电子邮件中并发送给我。每张图片大约 30 KiB,在电子邮件中放入 15 张应该不成问题。
到目前为止,我一直在使用这篇文章中的大部分代码这里进行一些更改以匹配我的文件系统。
这是我正在使用的代码:
#!/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=...
,然后想知道为什么你的脚本被破坏了