邮寄多个文件而不考虑文件是否存在



我在一封邮件中向自己发送多个文件:

file1="/somedir/file1.md"
file2="/somedir/file2.md"
file3="/somedir/file3.md"
file4="/somedir/file4.md"
echo "Body text" | mailx -s "The Files" -a "${file1}" -a "${file2}" -a "${file3}" -a "${file4}" recipient@domain.com

这些文件并不总是在那里,因此如果这些附件中的任何一个不存在,则不会发送邮件。但是,无论如何,我都想发送带有附件的邮件。我可以构建一个嵌套在其中的多个其他 if 语句的 if 语句,但这似乎有点狡猾。什么是更好的方法?

构建一个参数数组(也来自一组候选者(:

files=(/somedir/file1.md
       /somedir/file2.md
       /somedir/file3.md
       /somedir/file4.md)

for f in "${files[@]}"; do
    [[ -f "$f" ]] && attachments+=(-a "$f")
done
echo "Body text" | mailx -s "The files" "${attachments[@]}"

您可以通过过滤掉不存在的文件来动态构建-a选项:

files_arg=
for file in /somedir/file1.md /somedir/file2.md /somedir/file3.md /somedir/file4.md ~/.bashrc; do
    [[ -f $file ]] && files_arg="$files_arg -a $file"
done
echo $files_arg

输出:

-a /home/max/.bashrc

相关内容

  • 没有找到相关文章

最新更新