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

Mailing multiple files unregarding file existence

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

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 语句,但这似乎有点不对劲。什么是更好的方法?

您可以通过过滤掉 non-existent 个文件来动态构建 -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

构建数组 参数(也来自候选数组):

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[@]}"