How can I use a logical AND in a shell pattern (glob)?
That can be achieved through the !() extglob operator. You'll need extglob set. It can be checked with:
$ shopt extglob
and set with:
$ shopt -s extglob
To warm up, we'll move all files starting with foo AND not ending with .d to directory foo_thursday.d:
$ mv foo!(*.d) foo_thursday.d
For the general case:
Delete all files containing Pink_Floyd AND not containing The_Final_Cut:
$ rm !(!(*Pink_Floyd*)|*The_Final_Cut*)
By the way: these kind of patterns can be used with KornShell and KornShell93, too. They don't have to be enabled there, but are the default patterns.