Opcja powłoki extglob
daje mocniejsze dopasowanie wzorca w linii poleceń.
Włączasz go, używając shopt -s extglob
, i wyłącza się, używając shopt -u extglob
.
W przykładzie, należy najpierw zrobić:
$ shopt -s extglob
$ cp !(*Music*) /target_directory
Pełne dostępny ext zakończył glob operatorzy Bing są (fragment man bash
):
Jeśli opcja extglob shell jest włączona przy użyciu wbudowanego shopt, kilka rozszerzonych rozpoznających wzorce operatorów jest rozpoznawanych. W poniższym opisie tern-lista jest listą jednego lub więcej wzorów oddzielonych znakiem |. Kompozytowe stanie może być utworzony przy użyciu jednej lub więcej z następujących pod-wzorów:
- ?(Wzór z listy)
zero lub jedno wystąpienie podanych wzorach
- * (wzór z listy)
zero lub więcej wystąpień określonych wzorów
- + (wzór z listy)
obejmujący jedno lub więcej zdarzeń z podanych wzorów
- @ (wzór z listy)
zgodny z jednym z podanych wzorów
- ! (Wzorzec-lista)
zestawienia niczego z wyjątkiem jednego z podanych wzorów
Tak więc, na przykład, jeśli chcesz wyświetlić wszystkie pliki w bieżącym katalogu, które nie są .c
lub .h
pliki, byś zrobił:
$ ls -d !(*@(.c|.h))
oczywiście normalne prace powłoki globing, więc ostatni przykład można także zapisać jako:
$ ls -d !(*.[ch])
Podoba mi się ta funkcja: 'ls/dir/* /! (Base *)' –
Jak uwzględnić wszystko (*), a także wykluczyć! (B *)? –
Jak pasowałoby, powiedzmy, wszystko zaczynające się od 'f', z wyjątkiem' foo'? – Noldorin