Antworten:
Mit dem Ordner 'myfolder' und einer Ebene höher in der Dateihierarchie (der Punkt, den Sie einfügen möchten) würde der Befehl lauten:
mv myfolder/* .
Wenn also zum Beispiel die Daten /home/myuser/myfolder
aus waren, /home/myuser/
führen Sie den Befehl aus.
.*
. Das Entfernen des Originalordners ist trivial und wird nicht verlangt, daher überlassen wir es OP, sich selbst darum zu kümmern.
*
als auch .*
in einer Zeile zu schreiben ? Nur Neugier
mv
sind alle Quellen mit Ausnahme des LETZTEN Arguments, das das Ziel für das Verschieben sein muss (und im Fall mehrerer Quellen muss es sich um einen Ordner handeln).
/bin/mv: Argument list too long
Nur um es kristallklar zu machen, entnommen aus Rudus Antwort oben und den Kommentaren.
Wenn Sie den gesamten Inhalt verschieben müssen, EINSCHLIESSLICH der Dateien, die mit einem beginnen. (wie .htaccess, .git usw.) müssen Sie sowohl * als auch. * in Ihren Befehl aufnehmen. Wie so:
mv subfolder/* subfolder/.* .
Dadurch wird der Inhalt des Unterordners in den aktuellen Ordner verschoben. Beachten Sie das Leerzeichen vor dem letzten ".".
mv: rename fake/. to ./.: Invalid argument
undmv: rename fake/.. to ./..: Invalid argument
Dies ist mit folgenden Methoden möglich:
Verwenden von rsync
:
rsync -vua --delete-after foo/ .
Verwenden cp
und rmdir
:
cp -vaR foo/. . && rmdir foo/
Verwenden mv
(mit dotglob
aktivierter Option):
shopt -s dotglob # Includes filenames beginning with a dot.
mv -- foo/* . # Where foo/ is the folder consisting the files.
shopt -u dotglob # Disables previously enabled dotglob option.
Wo foo/
ist Ihr Ordner, dessen Inhalt eine Ebene nach oben verschoben werden soll?
Siehe: help shopt
und man bash
.
Verwendung mv
(wie hier vorgeschlagen ):
mv foo/* foo/.[^.]* . && rmdir foo/
Hinweis: Eine aufgerufene Datei würde fehlen foo/..bar..
.
Hinweis: Für POSIX-Shells benötigen Sie [!.]
.
-v
, -u
, -a
und zu -r
tun? AFAICT -v
ist ausführlich, wodurch rsync nur mehr Informationen ausgibt . -u
bedeutet Update - kopiere eine Datei nur, wenn sie neuer ist. Das scheint nicht relevant zu sein. -a
bedeutet Archiv. Dadurch werden der Eigentümer und die Berechtigungen der Datei kopiert und die Synchronisierung rekursiv. -r
bedeutet rekursiv, aber das ist bereits abgedeckt durch -a
.
-u
Dies ist nützlich, wenn Sie keine zusätzliche Zeit für das Verschieben von Daten aufwenden möchten, die bereits vorhanden sind (insbesondere für langsame Speichergeräte). Ich habe entfernt -r
, da es von -a
wie Sie erwähnt abgedeckt ist .
mv foo/* foo/.[^.]* .
würde eine Datei verpassen, die foo/..bar..
zum Beispiel aufgerufen wird . Beachten Sie, dass Sie für POSIX-Shells benötigen [!.]
.
rsync -vua --delete-after foo/ .
alles andere, was möglicherweise bereits im aktuellen Verzeichnis vorhanden ist, gelöscht wird.
gib einfach einen mv Befehl aus
mv (directory)/* .
Wenn Sie das Verzeichnis löschen möchten, fügen Sie hinzu
rm -rf (directory)
Angenommen, Sie befinden sich in einem übergeordneten Verzeichnis von (Verzeichnis).
Wenn Sie sich in dem (Verzeichnis) befinden, dann
mv * ../
.DS_store
in macOS allgegenwärtig sind . Der mv
obige Befehl verschiebt diese nicht (ohne dotglob
gesetzt).
Für diejenigen von Ihnen auf einem freigegebenen Server müssten Sie so etwas verwenden
Um die Dateien zu verschieben
mv -v ~/public_html/public_html/* ~/public_html/
So kopieren Sie die Dateien
cp -a ~/public_html/public_html/* ~/public_html/
.*
nicht nur übereinstimmen ,*
wenn das Archiv Punktedateien enthielt. Fügen Sie außerdem "&& rmdir myfolder" am Ende hinzu, um den jetzt nicht mehr benötigten Ordner zu entfernen. Dies ist sicher, weil es nur ausgeführt wird, wenn der Befehl mv Erfolg zurückgibt UND weil rmdir kein nicht leeres Verzeichnis entfernt.