我目前正在循环遍历一个目录,并检查一个数组,该数组包含所有我想匹配的字符串
matches=("README.md" "*.pdf" "item_output")
while IFS= read -r -d '' i; do
if [[ ${matches[*]} =~ $(basename $i) ]]; then
echo $i
fi
done <<(find /home/user/somedir -print0)
字符串
但是,它不仅匹配名为“item_output”的文件夹,还匹配名为“item”的文件夹。
我该如何补救才能只匹配完整的字符串?
3条答案
按热度按时间nxowjjhe1#
这取决于需求,但在bash中实现精确匹配的一种方法是循环遍历数组,并根据文件名检查每个元素,如下所示:
字符串
请记住,上述方法不适用于
*.pdf
通配符匹配。如果你想处理这个问题,你可以添加条件来处理glob模式:型
iq3niunx2#
简单而有效的方法是直接在
find
命令中使用globs:字符串
ws51t4hk3#
我同意Fravadona的观点,让
find
在这里做繁重的工作是有意义的,因为它的能力远远超过了它。如果不能或不想硬编码参数,可以通过循环匹配并构建参数数组传递给find
来动态生成参数。字符串