我有以下代码:
config_path="mypath/"
outD="outDir/"
for doms in Germ500 Port500 Spai500;do
echo "animating for: ${doms}"
config_name="${doms}_config.toml"
# Check if the Germ500_titt_20240903T0000_animation.html exists, otherwise make new
#
[ ! -f "${outD}${doms}_titt_[????????]T[????]_animation.html" ] && echo "File does not exist: make new" || echo "${outD}${doms}_titt_[????????]T[????]_animation.html exist"
done
如何修复该命令?
我尝试了以下方法:
[ ! -f "${outD}${doms}_titt_[0-9]{8}T[0-9]{4}_animation.html" ] && echo "File does not exist: make new" || echo "${outD}${doms}_titt_[????????]T[????]_animation.html exist"
通配符
[????????]T[????]
相当于[?]T[?]
(字符类仅匹配单个字符),它仅匹配文字文件名?T?
。如果要匹配数字,必须使用[0-9]
,即[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9]
。
但是
test -f
([ -f … ]
) 只能处理单个路径。引用表达式将阻止 glob 扩展,但即使扩展了 glob,您的脚本也会中断,因为 -f
只处理单个路径。
我可以让您对基于
find
的解决方案感兴趣吗?
if test "$(find "$outD" -maxdepth 1 -name "${doms}_titt_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9]_animation.html" -print -quit)"; then
echo 'file matching pattern exists'
else
echo 'no file matching pattern found'
fi
中查找其他(可移植或仅限 bash)解决方案