Verschieben Sie Dateien im Unterverzeichnis in ein anderes Verzeichnis

7

Ich habe ein Verzeichnis: ../Musicmit vielen Musikdateien in vielen Unterverzeichnissen.

Wie würde ich bewegen Sie alle Dateien in den Unterverzeichnissen in ein anderes Verzeichnis?
Daher möchte ich nur die Dateien verschieben, ich möchte die Unterverzeichnisstruktur nicht beibehalten.

Aerus
quelle
@iamsid Aah, ich habe den unix.stackexchange nicht überprüft, um ehrlich zu sein, es gibt auch einige großartige Antworten :)
Aerus

Antworten:

9

Angenommen, das aktuelle Verzeichnis enthält die Unterordner, ersetzen Sie TARGET_DIR in der folgenden Anweisung, in der es verwendet wird:

find . -name '*.mp3' -exec mv {} TARGET_DIR \;
chris
quelle
Schön, ich wusste, dass es mit find gemacht werden kann, aber mein Wissen über die Befehle in Unix ist irgendwo tief im Inneren vergraben. Vielen Dank!
Aerus
@ Aerus du bist willkommen. Und nicht prätentiös zu klingen, aber wenn Sie wissen, welchen Befehl Sie verwenden sollen, sind Sie nur ein "Mann-Befehl" davon entfernt, zu wissen, wie man ihn verwendet.
Chris
Oh, ich wusste , dass ich mit dem findBefehl alle Dateien in den Unterverzeichnissen finden konnte , aber ich dachte, ich hätte dann nur eine Liste von ihnen, die ich dann verarbeiten musste. Ich habe vergessen , über das exec, was im Grunde ist , warum ich nicht in der Manpage zu finden Besuche haben :) (Natürlich, wenn ich würde es ausgecheckt haben, fand ich hätte sich über die exec)
Aerus
@Aerus Lesen Sie mywiki.wooledge.org/UsingFind . Sie erhalten eine gute Vorstellung davon, wofür andere Aufgaben verwendet werden können.
Geirha
1
Mit GNU können findSie vermeiden mv, dass für jede zu verschiebende Datei ein neuer Prozess erzeugt wird : find ../Music \( -name \*.mp3 -o -name \*.ogg \) -exec mv -t [TARGET_DIR] -- \{\} +. Alternativ mit POSIX find: find ../Music \( -name \*.mp3 -o -name \*.ogg \) -print0 | xargs -0 -- mv -t [TARGET_DIR] --.
David Foerster
2

Versuche dies:

 cd ../Music

 for i in `ls -Q`; do  mv $i/* /Path/To/Some/Other/Directory;   done

Ich würde vorschlagen, zu verwenden, cpanstatt mvzu überprüfen, ob es gut funktioniert oder nicht. und wenn es gut funktioniert, löschen Sie einfach das ..MusicVerzeichnis

Bearbeiten: hinzugefügt -Q(und musste diese Erklärung hinzufügen, um mehr als sechs Zeichen zu erhalten)

aneeshep
quelle
Ich werde sehen, ob ich verwenden kann cp(ich weiß nicht, ob ich genug Speicherplatz auf meiner Ubuntu-Partition habe, weil ich glaube, dass es mehr als 150 GB Musik sind :)), danke für den Hinweis!
Aerus
Eeek. Dies ist eigentlich völlig falsch, da Leerzeichen in Dateinamen nicht berücksichtigt werden. Ich habe in einem -Qals Parameter zum ls...
0xC0000022L
1
Analysieren Sie niemals die Ausgabe. Verwenden Sie einen Glob. Siehe mywiki.wooledge.org/BashPitfalls
geirha
0

Die erste Antwort ist richtig, aber eine einfachere Möglichkeit, vorausgesetzt, Sie haben nur eine Ebene von Unterverzeichnissen, lautet:

mv ../Music/*/*.mp3 [insert target dest here]
argarevarg
quelle
Dies könnte besser als Kommentar verwendet werden.
Virusboy
Ich habe nicht genug Ruf, um die Beiträge anderer zu kommentieren, aber ja, vielleicht.
Argarevarg
@Virusboy: Ich denke, es ist eine gültige Antwort, die hier noch nicht aufgetreten ist.
David Foerster
0

Sie können auch Rhythmbox, Banshee oder eine ähnliche Software verwenden. Sie können Ihre Musikverzeichnisse scannen.

Sie können wählen, ob das Verzeichnis beibehalten werden soll, oder (in Ihrem Fall) die Software kann die Dateien in ein Rhythmbox- / Banshee-Verzeichnis verschieben, wodurch die gewünschte Hierarchie entfernt wird.

Dann,

cp /target/directory/* /desination/directory/ -r

Löschen Sie dann das Original, wenn es erfolgreich war.

YQ002lc2
quelle
0
(cd ~/Music ; tar cf - ) | (cd /path/to/other/directory; tar xf -) 
muru
quelle
Das ist Kopie, nicht bewegen.
0xC0000022L