Me puedo quedar y ... fuera de * expansión?

10

A menudo me resulta molesto (o peor) cuando escribo

command .*

en bash y el comando se aplica al directorio principal y al directorio actual. ¿Hay alguna opción de shell u otra configuración que pueda modificar para hacer que bash excluya .y ..desde la expansión .*?

David Z
fuente

Respuestas:

13

En bash, en este orden:

GLOBIGNORE=.
shopt -u dotglob

Cuando GLOBIGNORE está configurado,. y ... se ignoran automáticamente, por lo que no necesita configurarlos en GLOBIGNORE, pero si no tiene nada más que ignorar, no tendrá nada en qué configurarlo.

Cada vez que configura GLOBIGNORE en un valor no nulo, bash activa la opción dotglob, por lo que deberá desactivarla después; de lo contrario, bash se expandirá *para incluir archivos que comiencen con un punto.

camh
fuente
¡Genial, gracias! En realidad, preferiría haber dotglobactivado, por lo que la configuración GLOBIGNOREsuena perfecta.
David Z
Cuando GLOBIGNORE está configurado, Bash ignora .y ..pero no foo/.y foo/... Es posible que desee utilizar GLOBIGNORE=.:*/.:*/..para que esto funcione con los nombres de ruta también.
user123444555621
3

En un sistema desconocido donde tengo muy poco tiempo para verificar la configuración en uso (como GLOBIGNORE), uso el siguiente patrón infalible:

command .??*
  • Rápido de escribir y garantizado para excluir .e ..independientemente del entorno.
Alexander Shcheblikin
fuente
1
Siempre me gustó este enfoque, pero tenga en cuenta que no coincide con los archivos 1-char.a
MestreLion