检查是否存在包含数字的文件

问题描述 投票:0回答:1

我有以下代码:

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"

bash file search
1个回答
0
投票

通配符

[????????]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

测试 glob 在 Bash 中是否有任何匹配项

中查找其他(可移植或仅限 bash)解决方案
© www.soinside.com 2019 - 2024. All rights reserved.