Ich war überrascht, als ich kürzlich so etwas wie mv ./* ../somedirectory
gemacht habe
und fand, dass Dateien wie .gitignore
wurden nicht verschoben.
Ich mache den größten Teil meiner Arbeit in zsh unter OS X, und diese Überraschung hat mich in bash unter CentOS gebissen. Ich habe Bash unter OS X ausprobiert und das gleiche Verhalten festgestellt:*
stimmt nicht mit Punktdateien überein. Dies erscheint mir sehr unerwünscht, aber anscheinend ist es die Bash-Standardeinstellung. (Soweit ich mich erinnere, kann es auch der zsh-Standard sein, aber ich habe es vielleicht vor Jahren in meiner .zshrc geändert und vergessen, dass es jemals anders funktioniert hat.)
Wie kann ich bash so konfigurieren, dass es sich wie erwartet verhält:damit * alle Dateien abgleicht und Punktdateien nicht ignoriert werden.
Falls dies überhaupt unklar ist, können Sie es hier reproduzieren
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
Akzeptierte Antwort:
Bash
Wie Sie bereits bemerkt haben, findet bash keinen .
am Anfang des Namens oder einen Schrägstrich. Um die Übereinstimmung bezüglich des Punktes zu ändern, müssen Sie den dotglob
setzen Option – man bash:
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Um es mit Bash zu aktivieren/einzustellen, verwenden Sie shopt
, z. B.:
shopt -s dotglob
Für zsh können Sie auch den dotglob
verwenden Option, aber Sie müssen setopt
verwenden um es zu aktivieren, z. B.:
setopt dotglob