我有一个for循环用于处理与模式匹配的目录中的文件:
for file in ${dir}/FileName_${TIMESTAMP}-*; do
如果至少有一个匹配的文件,则此方法有效,但是如果没有,则会出现错误而不是跳过循环(执行零次)。
dir / FileName_2014_11_28- *:没有这样的文件或目录
为什么会这样?如何防止这种情况?
答案 0 :(得分:2)
要评估与任何内容都不匹配的glob,您需要打开nullglob
:
shopt -s nullglob
要小心,因为它并不总能满足你的需要。尝试ls nonexistent-prefix-*
:输出与ls
相同,没有参数。您可能还对failglob
选项感兴趣,该选项会将不匹配的glob变为错误。
答案 1 :(得分:1)
使用带有nullglob
的数组。
shopt -s nullglob
arr=(${dir}/FileName_${TIMESTAMP}-*)
for file in "${arr[@]}"; do
done
答案 2 :(得分:0)
您可以使用find
来完成此操作。
for file in $(find ${dir} -iname "FileName_${TIMESTAMP}-*")
do
echo $file
done
如果${dir}
中没有文件,for循环将不报告任何错误并将其视为空列表并移至下一个代码块。