Di recente sono rimasto sorpreso quando ho fatto qualcosa comemv ./* ../somedirectory
e ho trovato file come .gitignore
non sono stati spostati.
Faccio la maggior parte del mio lavoro in zsh su OS X e questa sorpresa mi ha morso in bash su CentOS. Ho provato bash su OS X e ho riscontrato lo stesso comportamento:*
non corrisponde ai file dot. Questo mi sembra molto indesiderabile, ma a quanto pare è l'impostazione predefinita di bash. (Potrebbe essere anche l'impostazione predefinita zsh per tutto ciò che ricordo, ma potrei averlo cambiato anni fa nel mio .zshrc e aver dimenticato che ha mai funzionato in modo diverso.)
Come posso configurare bash in modo che si comporti come previsto:affinché * corrisponda a tutti i file e non ignori i file dot.
Nel caso in cui ciò non fosse affatto chiaro, ecco come riprodurlo
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
Risposta accettata:
Bash
Come hai già notato, bash non corrisponderà a un .
all'inizio del nome o una barra. Per modificare la corrispondenza relativa al punto è necessario impostare il dotglob
opzione – man bash:
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Per abilitarlo/impostarlo con bash usa shopt
, ad esempio:
shopt -s dotglob
Per zsh puoi anche usare il dotglob
opzione ma ma dovrai usare setopt
per abilitarlo, ad esempio:
setopt dotglob