(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