邮寄多个文件unregarding文件存在
问题描述:
我发送多个文件,在一个邮件给我:邮寄多个文件unregarding文件存在
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}" [email protected]
这些文件并不总是存在,所以如果这些附件是不存在的邮件不会被发送。不过,无论如何,我还是要将邮件发送给那里的附件。我可以创建一个if语句,其中包含多个嵌套在其中的if语句,但这似乎有点迂回。什么是更好的方法?
答
您可以通过过滤掉不存在的文件动态构建-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[@]}"
+0
如何比不使用数组更好? –
+1
它确保需要引用的文件名保持如此。 – chepner
您还可以创建丢失的文件如果在那里没有一个,将会创建一个新文件。不好的一面是你会发送空附件 –
宁可不发送空附件。 – Swifting