Recientemente me sorprendí cuando hice algo comomv ./* ../somedirectory
y encontré que archivos como .gitignore
no se movieron.
Hago la mayor parte de mi trabajo en zsh en OS X, y esta sorpresa me mordió en bash en CentOS. Probé bash en OS X y encontré el mismo comportamiento:*
no coincide con los archivos de puntos. Esto me parece muy indeseable, pero aparentemente es el valor predeterminado de bash. (Por lo que recuerdo, también puede ser el valor predeterminado de zsh, pero es posible que lo haya cambiado hace años en mi .zshrc y haya olvidado que alguna vez funcionó de manera diferente).
¿Cómo puedo configurar bash para que se comporte como esperaba:para que * coincida con todos los archivos y no ignore los archivos de puntos?
En caso de que esto no esté del todo claro, he aquí cómo reproducirlo
cd /tmp
mkdir {t,d}est
touch test/{.,}{1,2,3,4,5,6,7}
ls -hal test
mv test/* dest
ls -hal test # notice dot files are still there
ls -hal dest # notice only some files were mv'ed
Respuesta aceptada:
Golpe
Como ya notó, bash no coincidirá con un .
al comienzo del nombre o una barra inclinada. Para cambiar la coincidencia con respecto al punto, debe configurar el dotglob
opción - man bash:
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Para habilitarlo/configurarlo con bash use shopt
, por ejemplo:
shopt -s dotglob
Para zsh también puede usar dotglob
opción pero tendrás que usar setopt
para habilitarlo, por ejemplo:
setopt dotglob