GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die Einstellung in Bash für Globbing, um zu steuern, ob * mit Punktdateien übereinstimmt?

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

Linux
  1. So suchen Sie in der Konsole nach großen Dateien

  2. Holen Sie sich individuelle Manpages für die Bash Builtin-Befehle?

  3. Bleiben Sie auf dem Laufenden – Beispiele für Bash-For-, While- und Until-Loops

  4. Wie die BASH-Shell ihre Konfigurationsdateien unter Linux lädt

  5. Druckdatum für den Montag der aktuellen Woche (in bash)

4 Markdown-Tools für die Linux-Befehlszeile

Tipps zum Auflisten von Dateien mit ls in der Linux-Befehlszeile

Zwei großartige Anwendungen für den cp-Befehl:Bash-Shortcuts

Bash For Loop – Die praktischste Anleitung

Die Bash FOR-Schleife erklärt und vereinfacht

Wie ändere ich die Auflösung der Bash für eine Debian-VM?