(12 risposte)
Chiuso 6 anni fa.
Voglio globare ogni file e directory nascosti, ma non l'attuale (.
) e directory principale (..
).
Sto usando bash.
Osservare il comportamento attuale:
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Vorrei .*
comportarsi così
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
C'è l'opzione della shell dotglob
$ shopt -s dotglob
che funziona in un certo modo; ora posso usare *
per glob tutto (nascosto o meno) ma non .
e ..
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
ma ora non riesco a distinguere tra nascosto o meno. Inoltre, .*
ancora glob .
e ..
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
C'è un modo per creare .*
non espandere a .
e ..
?
Risposta accettata:
Puoi usare il GLOBIGNORE
variabile per nascondere il .
e ..
directory. Questo imposta automaticamente anche il dotglob
opzione, quindi *
ora corrisponde sia ai file nascosti che a quelli non nascosti. Puoi di nuovo deselezionare manualmente dotglob
, tuttavia, questo dà il comportamento desiderato.
Vedi questo esempio:
$ ls -a
. .. a .a ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a