邮寄多个文件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语句,但这似乎有点迂回。什么是更好的方法?

+0

您还可以创建丢失的文件如果在那里没有一个,将会创建一个新文件。不好的一面是你会发送空附件 –

+0

宁可不发送空附件。 – Swifting

您可以通过过滤掉不存在的文件动态构建-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 
+0

请勿为此使用常规参数;使用数组。 – chepner

+0

@chepner然后发布你自己的答案。 –

+0

如果其中一个文件被命名为'updated data.md',该怎么办? – chepner

建立起来的论点的阵列(从候选人的阵列,也):

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