Kopieren Sie Dateien rekursiv von einem Verzeichnis in ein anderes

11

Ich habe alle meine Musik in einem Ordner /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside. Ich möchte alle MP3s kopieren, /media/kalenpw/HDD/Musicalso habe ich verwendet:

cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music

Dies kopierte jedoch nur die MP3s im Root-Musikordner und öffnete keines der Künstler-Unterverzeichnisse und kopierte diese Dateien.

Ich hatte den Eindruck -R, alle Dateien rekursiv zu kopieren. Wie kann ich dieses Ziel erreichen?

kalenpw
quelle

Antworten:

19

Verwenden:

find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;

Der Grund dafür, dass Ihr Befehl nicht funktioniert, ist, dass Namen mit Platzhaltern ( *.mp3) erweitert werden, bevor der Befehl ausgeführt wird. Wenn Sie also drei Dateien (,,) hatten 01.mp3, 02.mp3war 03.mp3Ihr effektiver Befehl:

cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music

Wie Sie sehen, -Rhat dies in diesem Fall keine Auswirkung.

Techraf
quelle
Ich empfehle -inamestatt für den -nameFall, dass irgendwelche Dateien enden .MP3.
Olathe
Danke, das hat funktioniert. Oder ist gerade dabei zu arbeiten.
Kalenpw
5

Sie haben ausdrücklich erwähnt, dass die zu kopierenden *.mp3Dateien / Verzeichnisse mit einem beliebigen Datei- / Verzeichnisnamen enden sollen, der auf endet .mp3.

So eine Datei mit der Endung .mp3in /media/kalenpw/MyBook/Music/Verzeichnis und in ähnlicher Weise ein beliebiges Verzeichnis der Endung .mp3in /media/kalenpw/MyBook/Music/wird rekursiv kopiert werden. Wenn es keine solche übereinstimmende Datei / kein solches Verzeichnis gibt, wird nichts kopiert.

So kopieren Sie nun alle .mp3Dateien von /media/kalenpw/MyBook/Music/recursivley in das Verzeichnis /media/kalenpw/HDD/Music/:

  • Verwenden von bash:

    shopt -s globstar
    cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
    
  • Verwenden von find:

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    
heemayl
quelle
Danke, Techraf hat zuerst geantwortet, also habe ich ihre Antwort akzeptiert.
Kalenpw
1

Sie können auch cpr verwenden :

$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'

Beachten Sie, dass ohne -p cpr vollständige Verzeichnispfade für kopierte Dateinamen beibehalten werden.
-rkann verwendet werden (anstelle von -p), um den Pfad unter '/media.../Music/' beizubehalten.
Es cprwird auch darauf geachtet, dass keine Datei überschrieben wird, indem eine Nummer ab '0001' an jeden wiederholten kopierten Dateinamen angehängt wird.

circulosmeos
quelle
0

Angenommen, Sie haben eine Reihe von .docx, .mp3, .txtund .xlsxDateien in diesem Verzeichnis - Struktur gespeichert:

/files/
/files/dir1/
/files/dir1/dir11/
/files/dir1/dir12/
/files/dir1/dir13/
/files/dir2/
/files/dir3/
/files/dir3/dir31/
/files/dir3/dir32/
/files/dir4/
/files/dir5/
/files/dir51/
/files/dir52/
/files/dir53/
/files/dir54/

... und Sie wollen in alle solchen Verzeichnisse , um rekursiv alle gefundenen zu kopieren .mp3Dateien , /home/me/music/aber Sie nicht wollen solchen Verzeichnisbaum in dem Ziel zu erhalten (dh Sie alle gefundenen wollen .mp3Dateien kopiert werden , /home/me/music/anstatt an den jeweiligen Verzeichnisse von kopiert wie /home/me/music/dir1/, /home/me/music/dir1/dir11/et cetera).

Führen Sie in diesem Fall zuerst am Shell-Terminal (bash) diesen Befehl aus, um auf das Stammverzeichnis Ihrer Dateisuche zuzugreifen:

cd /files

... und führen Sie dann diesen Befehl aus:

for i in `find . -iname '*.mp3'`; do cp $i /home/me/music/; done

Falls Sie es möchten die Quelle des Verzeichnisbaum im Ziel zu erhalten, führen Sie diesen Befehl statt (nach dem Laufen cd /files):

find . -iname '*.mp3' | cpio -pdm /home/me/music/

Auf den obigen Befehlen ist die Suche Groß- und Kleinschreibung (dh Streichhölzer .mp3, .MP3, .mP3und .Mp3). Verwenden Sie -nameanstelle von, -inamewenn bei der Suche zwischen Groß- und Kleinschreibung unterschieden werden soll (z. B. entspricht die Verwendung -namefür die .mp3Zeichenfolge den Dateien, die mit enden, .mp3aber nicht denen, die mit enden .MP3, .mP3noch .Mp3).

Yuri Sucupira
quelle