(12 respuestas)
Cerrado hace 6 años.
Quiero glob todos los archivos y directorios ocultos, pero no el actual (.
) y el directorio principal (..
).
Estoy usando bash.
Observe el comportamiento actual:
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Me gustaría .*
comportarse así
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
Existe la opción de shell dotglob
$ shopt -s dotglob
eso funciona de alguna manera; ahora puedo usar *
para englobar todo (oculto o no) pero no .
y ..
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
pero ahora no puedo diferenciar entre oculto o no. Además, .*
todavía globs .
y ..
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
¿Hay alguna manera de hacer .*
no expandir a .
y ..
?
Respuesta aceptada:
Puedes usar el GLOBIGNORE
variable para ocultar el .
y ..
directorios. Esto también establece automáticamente el dotglob
opción, entonces *
ahora coincide con archivos ocultos y no ocultos. Puede volver a desactivar manualmente dotglob
, sin embargo, esto le da el comportamiento que desea.
Vea este ejemplo:
$ ls -a
. .. a .a ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a