我有一些Unix命令查找具有相应jpg文件的mov-文件:
find . -name '*.[Mm][Oo][Vv]' -exec sh -c '
for mov; do
for jpg in "${mov%.*}".[Jj][Pp][Gg]; do
if test -f "$jpg"; then
echo "$mov"
fi
break
done
done' sh {} +当前代码只搜索.jpg (或大写)作为文件扩展名,但我需要扩展它以支持以".jpeg“结尾的文件。
我修改了代码,说:
for jpg in "${mov%.*}".[Jj][Pp][Ee]?[Gg]; do我认为应该有可能有一个可选的"E或e",但这是行不通的。
我可以用这个代替
for jpg in "${mov%.*}".[Jj][Pp]*[Gg]; do这是不太安全的,因为它会接受更多的E和E在那个位置。
有什么想法吗?如何修改表达式以在reg中添加可选的e/E?
发布于 2022-09-27 21:11:16
extglob特性就足够了。在使用shopt -s extglob时运行bash (而不是 sh)将允许您使用?([Ee])引用[Ee]的零个或一个实例。
更好的是,当我们设置shopt标志时,我们可以设置nocaseglob,这样就可以使用*.jp?(e)g,而无需显式字符类。(与此等效的find是将-name更改为-iname,除此之外,还做了以下操作)。
find . -iname '*.mov' -exec bash -c '
shopt -s extglob nocaseglob
for mov; do
for jpg in "${mov%.*}".jp?(e)g; do
if test -f "$jpg"; then
printf "%s\n" "$mov"
fi
break
done
done' bash {} +https://stackoverflow.com/questions/73873832
复制相似问题