Wie verschiebe ich alle Dateien über die Befehlszeile von einem Ordner in einen anderen?

245

Ich möchte wissen, wie ich alle Dateien von einem Ordner in einen anderen Ordner mit einer Befehlszeile verschieben kann.

Angenommen, ich befinde mich in meinem Downloads-Ordner und es gibt 100 Dateien, die ich in meinen Videos-Ordner verschieben möchte, ohne alle Dateinamen eingeben zu müssen.

Michael
quelle
Du fragst nach dem Umzug, filesaber die Leute zeigen dir, wie man sich nicht nur bewegt, filessondern foldersauch. Ist das in Ordnung?
Askar
2
@ Hontvári Levente gab vor einem Jahr eine Antwort, die bei weitem die beste zu sein scheint, sauber, einfach und es funktioniert. Wie hat es also nur 3 Stimmen bekommen (im Vergleich zu 262 für die Antwort, die derzeit oben steht)?
Ray Butterworth

Antworten:

331

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

mv  -v ~/Downloads/* ~/Videos/

Alle Dateien und Ordner werden vom Ordner "Downloads" in den Ordner "Videos" verschoben.


So verschieben Sie alle Dateien, jedoch keine Ordner:

Wenn Sie alle Dateien (aber keine Ordner) aus dem Ordner "Downloads" in den Ordner "Videos" verschieben möchten, verwenden Sie diesen Befehl

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

So verschieben Sie nur Dateien aus den Download-Ordnern, nicht jedoch aus Unterordnern:

Wenn Sie alle Dateien aus dem Download-Ordner verschieben möchten, jedoch keine Dateien in Ordnern im Download-Ordner, verwenden Sie diesen Befehl:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

Hier gibt die -maxdepthOption an, wie tief der Suchvorgang ausgeführt werden soll. Dies 1bedeutet, dass nur das im Befehl find angegebene Verzeichnis verwendet wird. Sie können versuchen 2, 3auch zu testen.

Eine ausführliche Erklärung finden Sie in der Ubuntu Find-Manpage

Anwar
quelle
3
Sie können mv alleine verwenden, um ein gesamtes Verzeichnis in einen anderen Ordner zu verschieben: mv
folder
20
Zu Ihrer Information: Ich glaube, Ihr erster Befehl ("mv -v ~ / Downloads / * ~ / Videos /") verschiebt keine Punktedateien.
Mark Doliner
1
Ja, die .files werden nicht verschoben
Anwar
3
Nb. Sie -print0 | xargs -0 mv -t ~/Videoskönnen effizienter erledigt werden mit -exec mv -t ~/Videos \{\} \+:-)
Artfulrobot
3
mv -v ~/Downloads/* ~/Videos/funktioniert nicht für versteckte Dateien
FreeLightman
28
mv ~/Downloads/* ~/Videos

Es werden alle Dateien einschließlich der Unterordner in das gewünschte Verzeichnis verschoben mv. Wenn Sie cp(kopieren) oder rm(entfernen) möchten, benötigen Sie die -rOption (rekursiv), um Unterordner einzuschließen.

user223289
quelle
2
Mein mv-Befehl hat keine -R-Option (Ubuntu 14.04).
Mark Doliner
1
@MarkDoliner mvbenötigt keine rekursive Option, um Unterordner einzuschließen . Man kann es auch zum Umbenennen verwenden.
Alen
Ich brauchte nicht *. Das Gleiche geschah ohne den Stern zu benutzen.
MycrofD
Das ~ / im Präfix der Ordnernamen funktioniert nicht immer (funktioniert nicht bei bash und git atleast)
Krish Munot
Diese Lösung gibt einen Fehler aus, wenn das Quellverzeichnis leer ist.
Pierre Thibault
11

Für den einfachen Fall:

mv ~/Downloads/* ~/Videos

Wenn Sie auch (versteckte) Punktdateien verschieben möchten, setzen Sie die Option dotglob shell.

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Dadurch bleibt der Shell-Optionssatz erhalten.

Führen Sie bei einmaliger Verwendung von dotglob die Befehle in einer Subshell aus:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Hontvári Levente
quelle
Ein Hinweis für mich: Die letzte Option (shopt -s dotglob; mv ~/Downloads/* ~/Videos) nur bewegt (cuts) der Inhalt (einschließlich der versteckten Dateien). In diesem Fall müssen der Ursprungs- und der Zielordner bereits vorhanden sein. Am Ende wird das Ursprungsverzeichnis leer.
Pathros
Dies sollte die akzeptierte Antwort sein
Megar
11

Dies rsyncist zum Beispiel möglich mit :

rsync -vau --remove-source-files src/ dst/

wo:

-v, --verbose: Ausführlichkeit erhöhen.

-a, --archive: Archivierungsmodus; gleich -rlptgoD(keine -H, -A, -X).

-u, --update: Überspringen Sie neuere Dateien auf dem Receiver.

--remove-source-files Auf diese Weise werden rsyncdie Dateien (dh Nichtverzeichnisse), die Teil der Übertragung sind und auf der Empfängerseite erfolgreich dupliziert wurden, von der Senderseite entfernt.

Wenn Sie über Root-Berechtigungen verfügen sudo, setzen Sie ein Präfix mit , um potenzielle Berechtigungsprobleme zu überschreiben.

Kenorb
quelle
1
WARNUNG! Die Option --delete-after funktioniert nicht wie erwartet. Die Quelldateien werden nach dem erfolgreichen Kopieren nicht gelöscht ... ES LÖSCHT ALLE ÜBRIGEN / ANDEREN DATEIEN IM ZIEL. (wie @kenorb bemerkte ... aber ich habe nicht sorgfältig genug gelesen! DOH)
Jay Marm
4

Verwenden

mv -v ~/rootfolder/branch/* ~/rootfolder

Ich hoffe das hilft. Weil ich die gleichen Schmerzen hatte und viel Zeit damit verschwendete, meinen Fehler zu beheben.

Udit Chugh
quelle
2

So verschieben Sie ein Verzeichnis mit oder ohne Inhalt in den neuen Namen, so wie Sie den mvBefehl zum Umbenennen einer Datei verwenden würden:

mv -T dir1 dir2

wo:

  • -T behandelt das Ziel als normale Datei
  • dir1 ist der ursprüngliche Name des Verzeichnisses
  • dir2 ist der neue Name des Verzeichnisses

NB: dir2muss nicht existieren.

Ich hoffe, dies spart jemandem viel Zeit, als Anfänger, bevor ich ein Verzeichnis mit dem neuen Namen erstellen und dann den Inhalt des Verzeichnisses in das zuvor erstellte Verzeichnis verschieben würde.

Verwenden Sie für Unterverzeichnisse

Dieser Befehl ist nützlich, wenn viele Dateien in einem Unterordner des Zielverzeichnisses gespeichert wurden, z Downloads/mp4. In diesem Beispiel führt das Ausführen mv -T Downloads/mp4 Videosdazu, dass der mp4Unterordner entfernt wird und alle darin enthaltenen Dateien in den Ordner "Videos" verschoben werden.

Feyisayo Sonubi
quelle
1
+1 weil getestet in Xubuntu arbeiten 14.04. Ich habe ein Beispiel zu dieser Antwort hinzugefügt, um zu zeigen, dass dieser Befehl das dir1Entfernen von bewirkt . Abgesehen von dieser Vorsichtsmaßnahme hat diese Antwort etwas Gutes für den täglichen Gebrauch festgestellt.
Clearkimura
1
"So verschieben Sie ein Verzeichnis mit oder ohne Inhalt in seinen neuen Namen" Wie können Sie ein Verzeichnis ... in einen Namen verschieben? Das macht keinen Sinn. "-T behandelt das Ziel als normale Datei" Wie kann ein Ziel eine Datei sein? Meinst du Verzeichnis?
Monica Heddneck
Es ist so, als würde man eine Datei in einen neuen Namen umbenennen, als würde mv fileA fileBdas -TFlag in diesem Fall das Ziel / Verzeichnis als Datei behandeln und umbenennen.
Feyisayo Sonubi
Arbeitete für mich :)
Naveen Kumar V
1
  1. Wechseln Sie in die Befehlszeile und rufen Sie das Verzeichnis auf, in das Sie es verschieben möchten cd folderNamehere
  2. Typ pwd. Dadurch wird das Verzeichnis gedruckt, in das Sie es auch verschieben möchten.
  3. Wechseln Sie dann in das Verzeichnis, in dem sich alle Dateien befinden cd folderNamehere
  4. Nun verschieben Sie alle Dateitypen mv *.* typeAnswerFromStep2here

Dadurch werden alle Dateien von diesem Verzeichnis in das andere verschoben.

jrh
quelle
3
Dies stimmt nicht mit Dateien ohne Erweiterung überein. Wenn ein Ordner zum Beispiel hat die Dateien: foo.txt, bar.und barbeide bar.und barwird nicht verschoben. Verwenden *statt *.*kümmert sich darum. Aber in beiden Fällen werden versteckte Dateien wie: .foobarnicht verschoben.
Dan
1
mv source_path/* destination_path/

Hier müssen Sie einen Schrägstrich und *nach dem Quellpfad einfügen, damit Dateien innerhalb des Quellpfads anstelle des vollständigen Quellverzeichnisses verwendet werden.

Beispiel: mv /home/username/test/* /home/username/test2/

Der obige Befehl verschiebt alle Dateien (sofern sie nicht ausgeblendet sind) im Quellverzeichnis in das Zielverzeichnis.

vivek Kumar
quelle
0

Versuch es

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type mit dem Argument -type können Sie den Typ file.on dieser Anweisung angeben, die die mittlere Datei.if ist, wobei -d das Verzeichnis bedeutet.

-iname: Die häufigste und naheliegendste Methode zum Suchen einer Datei ist die Verwendung des Arguments -name. Wenn Sie sich nicht sicher sind, ob die Groß- und Kleinschreibung beachtet werden soll, können Sie das Argument -iname verwenden

mv {} und schließlich, um das Zielverzeichnis anzugeben und die Dateien dann mit dem Argument mv {} dorthin zu verschieben

pedram shabani
quelle