在bash中匹配*.jpg而不是*.foo.jpg

Jor*_*tek 1 bash glob

这一定很简单,但我无法弄清楚.

for filename in *[^\.foo].jpg
do
echo $filename
done
Run Code Online (Sandbox Code Playgroud)

而不是匹配的文件名,echo显示模式:

+ echo '*[^.foo].jpg'
*[^.foo].jpg
Run Code Online (Sandbox Code Playgroud)

意图是找到所有以.jpg但不是结尾的文件.foo.jpg.

编辑:按照(被误解的)建议尝试:

for filename in *[!".foo"].jpg

还没有!

Cha*_*ffy 6

你实际上可以用extglob做到这一点.要演示,复制并粘贴以下代码:

shopt -s extglob
cd "$(mktemp -d "${TMPDIR:-/tmp}/test.XXXXXX")" || exit
touch hello.txt hello.foo hello.foo.jpg hello.jpg
printf '%q\n' !(*.foo).jpg
Run Code Online (Sandbox Code Playgroud)

输出应该是:

hello.jpg
Run Code Online (Sandbox Code Playgroud)