it-swarm.com.de

Kopieren Sie Dateien rekursiv von einem Verzeichnis in ein anderes

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

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

dies kopierte jedoch nur die MP3s im Stammverzeichnis und öffnete keine der Künstlerverzeichnisse und kopierte diese Dateien.

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

10
kalenpw

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) vor der Ausführung des Befehls erweitert werden. Wenn Sie also drei Dateien (01.mp3, 02.mp3, 03.mp3) Ihr effektiver Befehl war:

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, hat -R in diesem Fall keine Auswirkung.

15
techraf

Sie haben speziell die zu kopierenden Dateien/Verzeichnisse mit *.mp3 angegeben, d. H. Alle Datei-/Verzeichnisnamen, die auf .mp3 enden.

Daher wird jede Datei, die auf .mp3 in /media/kalenpw/MyBook/Music/ endet, und in ähnlicher Weise jedes Verzeichnis, das auf .mp3 in /media/kalenpw/MyBook/Music/ endet, rekursiv kopiert. Wenn es keine solche übereinstimmende Datei/Verzeichnis gibt, wird nichts kopiert.

Kopieren Sie nun alle .mp3 Dateien von /media/kalenpw/MyBook/Music/ rekursiv in das Verzeichnis /media/kalenpw/HDD/Music/:

  • bash verwenden:

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

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    
5
heemayl

Sie können auch cpr verwenden:

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

Beachten Sie, dass ohne -pcpr vollständige Verzeichnispfade für kopierte Dateinamen beibehalten werden.
-r kann verwendet werden (anstelle von -p), um den Pfad unter '/media.../Music/' beizubehalten.
Auch cpr sorgt dafür, dass keine Datei überschrieben wird, und fügt eine Nummer ab '0001' an jeden wiederholten kopierten Dateinamen an.

1
circulosmeos