Das finde ich am elegantesten, da es auch nicht versucht ..
zu verschieben :
mv /source/path/{.[!.],}* /destination/path
Eine umfassende Reihe von Lösungen dazu finden Sie in der Antwort von UNIX &Linux auf Wie verschieben Sie alle Dateien (einschließlich versteckter Dateien) von einem Verzeichnis in ein anderes?. Es zeigt Lösungen in Bash, zsh, ksh93, Standard (POSIX) sh usw.
Sie können diese beiden Befehle zusammen verwenden:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
Oder alle zusammen (danke pfnuesel):
mv /path/subfolder/{.,}* /path/
Was erweitert wird zu:
mv /path/subfolder/* /path/subfolder/.* /path/
(Beispiel:echo a{.,}b
erweitert sich zu a.b ab
)
Beachten Sie, dass hier einige Warnungen angezeigt werden:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Ignorieren Sie sie einfach:Dies geschieht, weil /path/subfolder/{.,}*
wird auch zu /path/subfolder/.
erweitert und /path/subfolder/..
, das sind das Verzeichnis und das übergeordnete Verzeichnis (Siehe Was bedeuten „.“ und „..“ in einem Ordner?).
Wenn Sie nur kopieren möchten, können Sie einfach Folgendes verwenden:
cp -r /path/subfolder/. /path/
# ^
# note the dot!
Dies kopiert alle Dateien, sowohl normale als auch versteckte, seit /path/subfolder/.
expandiert zu "alles aus diesem Verzeichnis" (Quelle:Wie kopiert man mit cp, um versteckte Dateien und versteckte Verzeichnisse und deren Inhalt einzuschließen?)
Dadurch werden alle Dateien wie erwartet in das übergeordnete Verzeichnis verschoben, es werden jedoch keine versteckten Dateien verschoben. Wie geht das?
Sie könnten dotglob
einschalten :
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Um dotglob
auszuschalten , müssten Sie sagen:
shopt -u dotglob