Ich habe ein Verzeichnis, das entpackt ist, sich aber in einem Ordner befindet. Wie kann ich den Inhalt um eine Ebene nach oben verschieben? Ich greife über SSH auf CentOS zu.
127
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.
.*
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..*
. 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 Neugiermv
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:
Dadurch wird der Inhalt des Unterordners in den aktuellen Ordner verschoben. Beachten Sie das Leerzeichen vor dem letzten ".".
quelle
mv: rename fake/. to ./.: Invalid argument
undmv: rename fake/.. to ./..: Invalid argument
Dies ist mit folgenden Methoden möglich:
Verwenden von
rsync
:Verwenden
cp
undrmdir
:Verwenden
mv
(mitdotglob
aktivierter Option):Wo
foo/
ist Ihr Ordner, dessen Inhalt eine Ebene nach oben verschoben werden soll?Siehe:
help shopt
undman bash
.Verwendung
mv
(wie hier vorgeschlagen ):Hinweis: Eine aufgerufene Datei würde fehlen
foo/..bar..
.Hinweis: Für POSIX-Shells benötigen Sie
[!.]
.quelle
-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, diefoo/..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
Wenn Sie das Verzeichnis löschen möchten, fügen Sie hinzu
Angenommen, Sie befinden sich in einem übergeordneten Verzeichnis von (Verzeichnis).
Wenn Sie sich in dem (Verzeichnis) befinden, dann
quelle
rmdir
beschwert und beendet, wenn das Verzeichnis nicht leer ist.rm -r
Stattdessen wird es und der gesamte Inhalt gelöscht. (Es ist ein Poka-Joch .).DS_store
in macOS allgegenwärtig sind . Dermv
obige Befehl verschiebt diese nicht (ohnedotglob
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/
quelle