I want to use bash command line to match the file name "file 9.3.0.zip
".
Here is the test script for explaining the folder structure:
mkdir -p /tmp/test
touch "/tmp/test/file 9.3.0.zip"
touch "/tmp/test/file 9.3.0-sources.zip"
cd /tmp/test
If the folder does not contain any "-sources.zip
", then I can use "echo file*.zip
" to match "file 9.3.0.zip
".
But now it also contains "-sources.zip
" in it, I have tried the following pattern but still doesn't work:
echo file**!(-sources).zip
Here is the output:
file 9.3.0-sources.zip file 9.3.0.zip
How to write the pattern in bash command?
I will use this match only one file pattern in other bash command, for example:
unzip file*.zip -d /tmp/other
Thanks.
CodePudding user response:
I think the issue is that the *
in file*!(-sources).zip
can match something that means the remainder of the filename is not -sources.zip
.
This seems to work, but I haven't tested it thoroughly:
file!(*-sources).zip
This also seems to work (but I don't recommend it!):
!(!(file*.zip)|file*-sources.zip)