如何在文件名中使用 space 排除 bash 中的 -sources 模式

How to exclude -sources pattern in bash with space in file name

我想用bash命令行来匹配文件名“file 9.3.0.zip”。

这里是解释文件夹结构的测试脚本:

mkdir -p /tmp/test
touch "/tmp/test/file 9.3.0.zip"
touch "/tmp/test/file 9.3.0-sources.zip"

cd /tmp/test

如果文件夹中没有任何“-sources.zip”,那么我可以用“echo file*.zip”来匹配“file 9.3.0.zip”。

但是现在里面还包含“-sources.zip”,我试过下面的模式还是不行:

echo file**!(-sources).zip

这是输出:

file 9.3.0-sources.zip file 9.3.0.zip

如何在bash命令中写入模式?

我将在其他 bash 命令中使用此仅匹配一个文件模式,例如:

unzip file*.zip -d /tmp/other

谢谢。

我认为问题在于 file*!(-sources).zip 中的 * 可以匹配意味着文件名的其余部分不是 -sources.zip.

的内容

这似乎可行,但我还没有彻底测试它:

file!(*-sources).zip

这似乎也有效(但我不推荐!):

!(!(file*.zip)|file*-sources.zip)