Chci provést nějakou akci (řekněme chown
) na všechny skryté soubory v adresáři.
Vím, že toto .*
není dobrý nápad, protože najde také aktuální .
a nadřazený ..
adresáře (vím, že rm
nebude fungovat na .
a ..
ale další příkazy, včetně chown
a chmod
, se šťastně projeví)
Ale všechny moje skryté soubory mají jiná jména!
Jak mám vyhledat všechny skryté soubory při vyloučení .
a ..
?
Přijatá odpověď:
Můžete použít následující extglob
vzor:
[email protected](!(.|))
-
.
odpovídá doslovnému.
nejprve -
@()
jeextglob
vzor, bude odpovídat jednomu ze vzorů uvnitř, protože uvnitř máme pouze jeden vzor, vybere to -
!(.|)
je dalšíextglob
vzor (vnořený), který odpovídá libovolnému souboru s žádným nebo jedním.
; Jak jsme našli.
již na začátku bude celý tento vzor odpovídat všem souborům začínajícím.
kromě.
a..
.
extglob
je povolena na interaktivních relacích bash
ve výchozím nastavení v Ubuntu. Pokud ne, nejprve jej povolte:
shopt -s extglob
Příklad:
$ echo [email protected](!(.|))
.bar .foo .spam