如何在文件名中使用 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)
我想用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)