Ersatz für den DOS-Befehl „xcopy“

Ersatz für den DOS-Befehl „xcopy“

Unter DOS gibt es den Befehl

xcopy /s *.mp3 ..\TEMP2

Wie kann ich das in Ubuntu machen?

cp -r *.mp3 ../TEMP2

kopiert rekursiv alle mp3 Dateien, leider ohne Pfad wegen des *.mp3Filters.

cp -r *.* ../TEMP2

kopiert den Pfad, kann aber nicht auf MP3-Dateien beschränkt werden

Ich habe mir rsync angesehen, aber ich verstehe es nicht.

Antwort1

Die Stärke der Tools in Ubuntu liegt darin, dass man sie kombinieren kann. Der nächste Befehl findet alle MP3-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen und kopiert sie ../TEMP2/unter Beibehaltung der Pfade in den Ordner:

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3'- findet alle Dateien, die mit .mp3(ohne Berücksichtigung der Groß- und Kleinschreibung) enden und
    • -exec- führt für jede Übereinstimmung einen Befehl aus:
      • install -D {} ../TEMP2/{}- kopiert die gefundene Datei unter ../TEMP/Beibehaltung des Pfades. ( {}wird durch den Pfad inklusive Dateinamen ersetzt)
    • \;- beendet den -execBefehl

Wenn Sie den Fortschritt sehen möchten, fügen Sie -lsvor dem Befehl ("list") hinzu -exec. Es kann auch danach eingefügt werden \;, aber in diesem Fall wird der Name nach dem Kopieren angezeigt. Beispiele:

find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls

Antwort2

Es gibt mehrere Möglichkeiten, aber keine davon ist wirklich einfach, fürchte ich…

rsync

rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2

Dies bedeutet, dass alle Dateien ausgeschlossen werden ( exclude="*"), dafür aber alle Verzeichnisse durchsucht werden ( include="*/") und alle MP3-Dateien eingeschlossen werden ( include="*.mp3"). Wenn Sie keine Verzeichnisse kopieren möchten, die keine MP3-Dateien enthalten, --prune-empty-dirsist diese Option zusätzlich erforderlich.

Reißverschluss

zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip

Der erste Befehl erstellt ein Archiv mit allen MP3-Dateien, der zweite entpackt den Inhalt in das Zielverzeichnis und löscht die Archivdatei, wenn er erfolgreich war.

finden

find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"

Dadurch werden alle MP3-Dateien gefunden und in den entsprechenden Pfad im Verzeichnis kopiert ../TEMP2, nachdem zuvor die Verzeichnisstruktur erstellt wurde ( install -D).

alles kopieren und den Rest löschen

Dies ist nur dann sinnvoll, wenn Sie nur wenige Dateien haben, die Sienichtmöchte kopieren:

cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete

Dies kopiert alles und löscht dann alle Dateien, die keine MP3-Dateien sind

verwandte Informationen