Exclude a string from wildcard search in a shell
I am trying to exclude a certain string from a file search.
Suppose I have a list of files: file_Michael.txt, file_Thomas.txt, file_Anne.txt.
I want to be able and write something like
ls *<and not Thomas>.txt
to give me file_Michael.txt and file_Anne.txt, but not file_Thomas.txt.
The reverse is开发者_如何转开发 easy:
ls *Thomas.txt
Doing it with a single character is also easy:
ls *[^s].txt
But how to do it with a string?
Sebastian
You can use find to do this:
$ find . -name '*.txt' -a ! -name '*Thomas.txt'
With Bash
shopt -s extglob
ls !(*Thomas).txt
where the first line means "set extended globbing", see the manual for more information.
Some other ways could be:
find . -type f \( -iname "*.txt" -a -not -iname "*thomas*" \)
ls *txt |grep -vi "thomas"
If you are looping a wildcard, just skip the rest of the iteration if there is something you want to exclude.
for file in *.txt; do
case $file in *Thomas*) continue;; esac
: ... do stuff with "$file"
done
精彩评论