J'ai été surpris récemment lorsque j'ai fait quelque chose commemv ./* ../somedirectory
et trouvé que des fichiers comme .gitignore
n'ont pas été déplacés.
Je fais la plupart de mon travail en zsh sur OS X, et cette surprise m'a mordu en bash sur CentOS. J'ai essayé bash sur OS X et j'ai trouvé le même comportement :*
ne correspond pas aux fichiers de points. Cela me semble très indésirable, mais apparemment c'est la valeur par défaut de bash. (C'est peut-être aussi le zsh par défaut pour autant que je m'en souvienne, mais je l'ai peut-être changé il y a des années dans mon .zshrc et j'ai oublié que cela fonctionnait différemment.)
Comment puis-je configurer bash pour qu'il se comporte comme prévu :pour que * corresponde à tous les fichiers et n'ignore pas les fichiers de points.
Au cas où cela ne serait pas clair du tout, voici comment le reproduire
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
Réponse acceptée :
Frapper
Comme vous l'avez déjà remarqué, bash ne correspondra pas à un .
au début du nom ou d'une barre oblique. Pour changer la correspondance concernant le point, vous devez définir le dotglob
option - man bash :
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Pour l'activer/le configurer avec bash, utilisez shopt
, par exemple :
shopt -s dotglob
Pour zsh, vous pouvez également utiliser le dotglob
option mais mais vous devrez utiliser setopt
pour l'activer, par exemple :
setopt dotglob