[gelöst] *.m3u Playlist: Dateien einfach kopieren

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 26.11.2021 08:56:10

Habe hier eine Playlist mit knappen 160 Einträgen, nennen wir sie:

Code: Alles auswählen

/home/sebastian/Musik/PLAYLISTS/playlist.m3u
Der Inhalt sieht auszugsweise wie folgt aus:

Code: Alles auswählen

#EXTM3U
#EXTINF:277,Babyshambles - Fuck Forever [Explicit]  [Down In Albion]
/home/sebastian/Musik/Babyshambles/Down In Albion/02 Fuck Forever.mp3
#EXTINF:208,The Clash - Rudie Can't Fail  [The Ultimate Collection]
/home/sebastian/Musik/The Clash/The Ultimate Collection/25 Rudie Can't Fail.mp3
#EXTINF:173,Fugazi - Waiting Room  [13 Songs]
/home/sebastian/Musik/Fugazi/13 Songs/01 Waiting Room.mp3
#EXTINF:279,Radiohead - Talk Show Host  [Bsides]
/home/sebastian/Musik/Radiohead/Bsides/02 Talk Show Host.mp3
#EXTINF:155,Babyshambles - Pipedown  [Down In Albion]
/home/sebastian/Musik/Babyshambles/Down In Albion/05 Pipedown.mp3
#EXTINF:179,Beastie Boys - Sabotage  [Beastie Boys Anthology - The Sounds Of Science]
/home/sebastian/Musik/Beastie Boys/Beastie Boys Anthology - The Sounds Of Science/23 Sabotage.mp3
#EXTINF:201,Arctic Monkeys - R U Mine?  [AM]
/home/sebastian/Musik/Arctic Monkeys/AM/02 R U Mine_.mp3
#EXTINF:173,Arctic Monkeys - Fluorescent Adolescent  [Favourite Worst Nightmare]
/home/sebastian/Musik/Arctic Monkeys/Favourite Worst Nightmare/05 Fluorescent Adolescent.mp3
#EXTINF:200,Jimi Tenor - Tsunami  [Beyond the Stars]
/home/sebastian/Musik/Jimi Tenor/Beyond the Stars/11 Tsunami.mp3
#EXTINF:222,Paul Cantelon - Start Wearing Purple  [Everything Is Illuminated]
/home/sebastian/Musik/Paul Cantelon/Everything Is Illuminated/17 Start Wearing Purple.mp3
(...........)
Gibt es einen einfachen Weg, die einzelnen Songs dieser Playlist alle in ein Verzeichnis zu kopieren, also dass ich den Inhalt der Playlist-Datei irgendwie lesbar an cp weiterreiche? Habe null Ahnung von awk oder was es da sonst noch an Programmen gibt. :roll:
Zuletzt geändert von dasebastian am 26.11.2021 11:35:43, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von Meillo » 26.11.2021 09:32:11

Cool, dass du gleich als erstes an awk denkst! -- Unsere Schwaermerei wirkt. :-D :THX:


Du kannst es so machen:

Code: Alles auswählen

grep -v ^# PLAYLIST.m3u | while read l ; do cp "$l" ZIELVERZEICHNIS ; done
(Nur noch `PLAYLIST' und `ZIELVERZEICHNIS' ersetzen.)

Zur Erklaerung: Das `grep' filtert alle Kommentarzeilen raus. Dann laeuft die Schleife ueber jede Zeile. (Das funktioniert also auch mit Dateinamen, die Leerzeichen enthalten.)
Use ed once in a while!

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 26.11.2021 10:41:47

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 09:32:11
Cool, dass du gleich als erstes an awk denkst! -- Unsere Schwaermerei wirkt. :-D :THX:
:D Jup, fiel mir als erstes ein, stolpere ich jetzt überall ständig drüber...
Du kannst es so machen: ....
Hmm, ich poste hier mal die Ausgabe einer kürzeren Playlist, die Dateien sind definitiv vorhanden, auch das Zielverzeichnis.

Code: Alles auswählen

sebastian@t420:~$ grep -v ^# /home/sebastian/Musik/PLAYLISTS/eoc.m3u | while read l ; do cp "$l" /home/sebastian/Downloads/plf/ ; done
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Damals Hintern Mond/02 Geh Doch Hin.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Damals Hintern Mond/04 Mach das Licht Aus, Wenn Du Gehst.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Damals Hintern Mond/05 Rein Gar Nichts.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
.
.
.
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Psycho/08 Nicht Dein Tag.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Psycho/09 So Wie Du.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Psycho/10 Kavallerie.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
.
.
.
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Weisses Papier/11 Alten Resten eine Chance.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für '/home/sebastian/Musik/Element of Crime/Die Schönen Rosen/03 Die schönen Rosen.mp3'$'\r' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sebastian@t420:~$
Habe das Kommando per Copy/Paste von dir übernommen und nur Quelle und Ziel korrigiert. Stehe ich da wo auf dem Schlauch?

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von Meillo » 26.11.2021 11:06:26

Die Playlist hat keine Unix-Zeilenenden, sondern Windows-Zeilenenden, darum ist er irritiert, weil am Ende immer noch ein \r kommt, das er als Teil des Dateinamens interpraetiert. Du kannst die Playlist mit dem Programm Debiandos2unix umwandeln und dann den Befehl nochmal aufrufen.

Oder du schiebst zwischen das `grep' und das `while' noch diesen Befehl in die Pipeline:

Code: Alles auswählen

tr -d '\r'
... das sollte auch gehen.
Use ed once in a while!

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 26.11.2021 11:35:26

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 11:06:26
Die Playlist hat keine Unix-Zeilenenden, sondern Windows-Zeilenenden, (...) Du kannst die Playlist mit dem Programm Debiandos2unix umwandeln und dann den Befehl nochmal aufrufen.
Ah okay, danke, mir kam die Ausgabe genau mit diesem "\r" seltsam vor, ich hatte aber Balken vor den Augen um überhaupt dahinterzukommen, WAS da wirklich das Problem war.
Oder du schiebst zwischen das `grep' und das `while' noch diesen Befehl in die Pipeline (...)
Das habe ich nicht geschafft, da habe Fehler gemacht und das sicher nicht richtig eingefügt. Da aber die Zeit ein bisschen drängt, habe ich es mit Debiandos2unix probiert und siehe da, alles fehlerfrei durchgerutscht! :D :D :D

Und wieder was gelernt (die dos/unix-Endungen) und mit deinem Befehl werde ich mich auch nochmal genauer auseinandersetzen, das Prinzip scheint mir klar, ich muss mir das dann aber Schritt für Schritt selber aufdröseln, damit ich's versteh.

Vielen Dank Meillo, Spitze, gelöst! :THX:

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von Meillo » 26.11.2021 11:58:10

dasebastian hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 11:35:26
Das habe ich nicht geschafft, da habe Fehler gemacht und das sicher nicht richtig eingefügt. [...]

[...] und mit deinem Befehl werde ich mich auch nochmal genauer auseinandersetzen, das Prinzip scheint mir klar, ich muss mir das dann aber Schritt für Schritt selber aufdröseln, damit ich's versteh.
Du musst dich da mit dem Konzept der Pipeline befassen. Da fliesst Text durch und mit jedem weiteren Befehl, den du einfuegst, veraenderst du den Text in irgendeiner Weise.

Hier mal ein Beispiel:

Code: Alles auswählen

cat playlist.m3u |    # gibt den Inhalt der Datei aus, d.h. in die Pipepline
  grep -v ^# |    # filtert alle Zeilen raus, die mit # beginnen
  tr -d \\r |    # entfernt alle \r im Text
  # ... hier koennte man nun noch weitere Umformungen machen: einfach mit einem Pipesymbol einen weiteren Befehl einfuegen
  while read l; do ...; done    # die Schleife verarbeitet die Zeilen, die noch uebrig sind, dann
Ich hoffe, das hilft dir beim Verstaendnis. Sonst einfach wieder fragen.


Edit: Nochmal den angepassten Befehl wie ich ihn konkret geschrieben haette:

Code: Alles auswählen

grep -v ^# playlist.m3u | tr -d \\r | while read l ; do cp "$l" ZIELVERZEICHNIS ; done
Use ed once in a while!

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 26.11.2021 12:04:43

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 11:58:10

Code: Alles auswählen

grep -v ^# playlist.m3u | tr -d \\r | while read l ; do cp "$l" ZIELVERZEICHNIS ; done
Das hatte ich so gemacht ABER da ist jetzt bei dir ein zweiter Backslash: "| tr -d \\r |". Ich hatte da nur einen gesetzt. Muss ich später ausprobieren, weil jedes nicht installierte Paket (dos2unix) ist ein gutes Paket.... :mrgreen:
Ich hoffe, das hilft dir beim Verstaendnis. Sonst einfach wieder fragen.
Danke dir, würde dann wohl ein eigener Faden werden.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von Meillo » 26.11.2021 12:44:11

dasebastian hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 12:04:43
Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 11:58:10

Code: Alles auswählen

grep -v ^# playlist.m3u | tr -d \\r | while read l ; do cp "$l" ZIELVERZEICHNIS ; done
Das hatte ich so gemacht ABER da ist jetzt bei dir ein zweiter Backslash: "| tr -d \\r |". Ich hatte da nur einen gesetzt.
Oben hatte ich es so gepostet:

Code: Alles auswählen

tr -d '\r'
das ist aequivalent zu:

Code: Alles auswählen

tr -d \\r
Es gibt verschiedene Arten wie man den Backslash escapen kann, man muss es halt machen.

(In dem konkreten Fall tippt sich fuer mich der doppelte Backslash schneller als die zwei Single-Quotes, darum mache ich es in genau dem Fall fast immer auf diese Art.)
Use ed once in a while!

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 26.11.2021 13:27:47

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 12:44:11
Oben hatte ich es so gepostet:

Code: Alles auswählen

tr -d '\r'
das ist aequivalent zu:

Code: Alles auswählen

tr -d \\r
Es gibt verschiedene Arten wie man den Backslash escapen kann, man muss es halt machen.
Überlesen :facepalm: Danke.

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 27.11.2021 08:09:19

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.11.2021 11:58:10
Edit: Nochmal den angepassten Befehl wie ich ihn konkret geschrieben haette:

Code: Alles auswählen

grep -v ^# playlist.m3u | tr -d \\r | while read l ; do cp "$l" ZIELVERZEICHNIS ; done
Habe das jetzt noch mal (in Ruhe) ausprobiert, hat jetzt funktioniert, bei mir muß sich da gestern wo der Fehlerteufel eingeschlichen haben.

Danke für die ausführlichen Erklärungen, ist jetzt so weit klar.

EDIT: Habe mir jetzt ein kleines Skript daraus gebastelt, Konfiguration passiert im Skript selbst, da gibt es sicher elegantere Lösungen, aber es funktioniert erst mal :D :

Code: Alles auswählen

#!/bin/bash

# xpl - Exportiere Audiodateien aus einer Playlist
# 20211127


# WÄHLE PLAYLIST AUS:
choice="/home/sebastian/Musik/PLAYLISTS/test.m3u"
# WÄHLE ZIELVERZEICHNIS AUS:
target="/home/sebastian/Downloads/playlistfiles"


echo "Lege Arbeitsverzeichnis an..."
mkdir "$target"
echo "Kopiere Songs der Playlinst ins Arbeitsverzeichnis..."
grep -v ^# "$choice" | tr -d \\r | while read l ; do cp "$l" "$target" ; done
echo "Export abgeschlossen, fertig."

# EOF

rhHeini
Beiträge: 2284
Registriert: 20.04.2006 20:44:10

Re: [gelöst] *.m3u Playlist: Dateien einfach kopieren

Beitrag von rhHeini » 27.11.2021 16:36:11

Noch ne Variante die ich benutzt habe um die Dateien von einer Playlist ohne Kommentare von meinem Fileserver auf einen USB-Stick zu schreiben

Code: Alles auswählen

while IFS= read -r line ; do cp -- "$line" /media/usb_device ; done < /home/user/Audio/playlist.m3u
Rolf

dasebastian
Beiträge: 1873
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] *.m3u Playlist: Dateien einfach kopieren

Beitrag von dasebastian » 27.11.2021 17:03:56

Ist also eine gängige Aufgabe, dachte mir schon, dass ich bei sowas nicht der einzige sein kann.

Danke für deinen Tipp, bin vollauf zufrieden mit der ersten Variante, da führen wohl viele Wege zu den mp3s. :THX:

Antworten