Voglio eseguire alcune azioni (ad esempio chown
) su tutti i file nascosti in una directory.
So che questo .*
è non una buona idea perché troverà anche il .
e genitore ..
directory (so che rm
non funzionerà su .
e ..
ma altri comandi, incluso chown
e chmod
, entrerà felicemente in vigore)
Ma tutti i miei file nascosti hanno nomi diversi!
Come dovrei glob per tutti i file nascosti escludendo .
e ..
?
Risposta accettata:
Puoi utilizzare il seguente extglob
modello:
[email protected](!(.|))
-
.
corrisponde a un letterale.
all'inizio -
@()
è unextglob
pattern, corrisponderà a uno dei pattern all'interno, poiché abbiamo solo un pattern al suo interno, lo sceglierà -
!(.|)
è un altroextglob
pattern (nidificato), che corrisponde a qualsiasi file senza o senza un.
; Come abbiamo abbinato.
già all'inizio, l'intero modello corrisponderà a tutti i file che iniziano con.
tranne.
e..
.
extglob
è abilitato nelle sessioni interattive di bash
per impostazione predefinita in Ubuntu. In caso contrario, abilitalo prima:
shopt -s extglob
Esempio:
$ echo [email protected](!(.|))
.bar .foo .spam