Der Befehl, den Sie suchen, ist
mv * .[^.]* ..
oder (siehe unten für weitere Informationen):
(shopt -s dotglob; mv -- * ..)
Erläuterung: Der mv
Befehl verschiebt Dateien und Verzeichnisse. Das letzte Argument von mv
ist das Ziel (in diesem Fall das Verzeichnis eine Stufe nach oben in der Baumstruktur ..
). Die Argumente davor sind die Quelldateien und Verzeichnisse. Das Sternchen ( *
) ist ein Platzhalter, der alle Dateien angibt, die nicht mit einem Punkt beginnen. Dateien, die mit einem Punkt beginnen (Punktdateien), sind "versteckt". Sie werden anhand des Musters abgeglichen .[^.]*
(siehe Bearbeiten unten).
Weitere Informationen finden Sie auf der von mir verlinkten Manpage mv
.
Warum .[^.]*
statt .*
?
Wie Chris Johnsen richtig feststellt: Das Muster .*
passt auch .
und ..
. Da Sie diese nicht verschieben möchten (und können), ist es besser, ein Muster zu verwenden, das mit jedem Dateinamen übereinstimmt, der mit einem Punkt beginnt, außer diesen beiden . Das Muster .[^.]*
tut genau das: Es stimmt mit jedem Dateinamen (1) überein, beginnend mit einem Punkt (2), gefolgt von einem Zeichen, das kein Punkt (3) ist, gefolgt von null oder mehr beliebigen Zeichen.
Wie Paggas ausführt, müssen wir auch das Muster hinzufügen, .??*
um Dateien abzugleichen, die mit zwei Punkten beginnen. Sehen Sie seine Antwort für eine alternative Lösung mit find
.
Arjans Antwort erwähnt shopt
, um all diese Probleme mit dotfiles zu vermeiden. Aber es gibt immer noch Probleme mit Dateien, die mit einem Bindestrich beginnen. Und es erfordert drei Befehle. Trotzdem mag ich die Idee. Ich schlage vor, es so zu verwenden:
(shopt -s dotglob; mv -- * ..)
Dies wird shopt
in einer Subshell ausgeführt (also kein zweiter Aufruf shopt
erforderlich) und wird --
so verwendet, dass Dateien, die mit einem Bindestrich beginnen, nicht als Argumente interpretiert werden mv
.