Size: 1373
Comment:
|
← Revision 8 as of 2015-03-05 00:31:02 ⇥
Size: 1469
Comment: syntax hl
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
{{{ | {{{#!highlight bash |
Line 13: | Line 13: |
{{{ | {{{#!highlight bash |
Line 19: | Line 19: |
{{{ | {{{#!highlight bash |
Line 24: | Line 24: |
{{{ | {{{#!highlight bash |
Line 29: | Line 29: |
{{{ | {{{#!highlight bash |
Line 35: | Line 35: |
{{{ | {{{#!highlight bash |
How can I use a logical AND/OR/NOT in a shell pattern (glob)?
"Globs" are simple patterns that can be used to match filenames or strings. They're generally not very powerful. If you need more power, there are a few options available.
If you want to operate on all the files that match glob A or glob B, just put them both on the same command line:
1 rm -- *.bak *.old
If you want to use a logical OR in just part of a glob (larger than a single charcter -- for which square-bracketed character classes suffice), in Bash, you can use BraceExpansion:
1 rm -- *.{bak,old}
If you need something still more general/powerful, in KornShell or BASH you can use extended globs. In Bash, you'll need the extglob option to be set. It can be checked with:
1 shopt extglob
and set with:
1 shopt -s extglob
To warm up, we'll move all files starting with foo AND not ending with .d to directory foo_thursday.d:
1 mv foo!(*.d) foo_thursday.d
A more complex example -- delete all files containing Pink_Floyd AND not containing The_Final_Cut:
1 rm !(!(*Pink_Floyd*)|*The_Final_Cut*)
By the way: these kind of patterns can be used with the KornShell, too. They don't have to be enabled there, but are the default patterns.