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 -
@()jeextglobvzor, bude odpovídat jednomu ze vzorů uvnitř, protože uvnitř máme pouze jeden vzor, vybere to -
!(.|)je dalšíextglobvzor (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