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 -
@()è unextglobpattern, corrisponderà a uno dei pattern all'interno, poiché abbiamo solo un pattern al suo interno, lo sceglierà -
!(.|)è un altroextglobpattern (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