m3u8-Dateien per Script in m3u umbennen inkl. Suchen/Ersetzen

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Hallo,

ich habe mehrere Playlisten (Pfad: \Sicherung\Playlist für LMS) von Poweramp, welche ich mit dem Syno für LMS synchronisieren möchte. LMS möchte die Wiedergabelisten jedoch im Format m3u, zudem müss ich die Playlisten auf von UTF-8 auf ANSI und den Pfad in den Dateien ändern.

Poweramp exportiert die Datein so: Meine Playlist.m3u8 in UTF-8, das Script müsste 1. die Endung auf m3u ändern und die Datei ins ANSI umcodieren.

Der Pfad ist bedingt durch die SD-Karte vom Smartphone "3132-3363/Music/", dieser müsste auf /Musik geändert werden.

Kann mir jemand dabei helfen, ein Script dafür zu schreiben, welches ich mit dem Aufgabenplaner ausführen kann?



Wenn ich zum Umbenennen folgenen Code verwende, dann habe ich Probleme bei Wiedergabenlisten mit Leerzeichen. Dateien ohne Leerzeichen werden korrekt umbenannt, Dateien mit Leerzeichen bekommen die Endung datei.m3u8.m3u
PHP:
#!/bin/bash

cd /volume1/Sicherung/Playlist-LMS
for f in *.m3u8; do 
    mv -- "$f" "${f%.m3u}.m3u"
done
 
Zuletzt bearbeitet:

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Code:
cp /volume1/sicherung/playlist-lms/* /volume1/sicherung/PlaylistAuto
Also umbenennen habe ich mit find hinbekommen, da ich nicht weiß, wie man bei der obrigen Lösung den Quote richtig für die Endung setzen muss.

Code:
#!/bin/bash

cd /volume1/Sicherung/Playlist-LMS
 find ./ -depth -name '*m3u8*' -execdir bash -c 'mv -- "$1" "${1//m3u8/m3u}"' bash {} \;

done

Umcodieren und den Pfad in den Dateien ändern fehlt jetzt noch :)

Bin wieder ein Schritt weiter


Code:
#!/bin/bash

cd /volume1/Sicherung/Playlist-LMS
 find ./ -depth -name '*m3u8*' -execdir bash -c 'mv -- "$1" "${1//m3u8/m3u}"' bash {} \;
sleep 10

sed -i -e 's/Music/Musik/g' *.m3u
sleep 10
sed -i -e 's/3132-3363//g' *.m3u

Noch etwas, ich versuche mit

Code:
cp /volume1/sicherung/playlist-lms/* /volume1/sicherung/PlaylistAuto

die Datein aus dem Ordner Playlist-LMS nach PlaylistAuto zu kopieren, bekomme aber den Fehler

"cp: cannot stat '/volume1/sicherung/playlist-lms/*': No such file or directory"

Was mache ich falsch?
 
Zuletzt bearbeitet:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
/volume1/sicherung/playlist-lms/
Du solltest hierbei auf Groß-/Kleinschreibung achten...

Vorher hast du ja auch folgendes verwendet:
/volume1/Sicherung/Playlist-LMS

Deshalb sagt cp auch dass das Verzeichnis nicht gefunden werden kann.
 
  • Like
Reaktionen: powermaniaxx

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Genau das wars, danke dir :)
 

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Müsste es hier im ersten Beitrag nicht so lauten?

"${f%.m3u8}.m3u"

Das weiß ich nicht, habs aber mit sed und find hinbekommen, damit läuft es.

Code:
#!/bin/bash

cd /volume1/Sicherung/Playlist-LMS
 find ./ -depth -name '*m3u8*' -execdir bash -c 'mv -- "$1" "${1//m3u8/m3u}"' bash {} \;
sleep 10

sed -i -e 's/Music/Musik/g' *.m3u
sleep 10
sed -i -e 's/3132-3363//g' *.m3u

Die Umcodierung muss ich noch irgendwie lösen, LMS liest zwar auch UTF-8-Wiedergabenlisten ein, mein Auto aber nicht, da geht, warum auch immer, nur ANSI.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Die Umcodierung muss ich noch irgendwie lösen, LMS liest zwar auch UTF-8-Wiedergabenlisten ein, mein Auto aber nicht, da geht, warum auch immer, nur ANSI.
Hiermit kannst du die Dateien umcodieren.
iconv -f UTF8 -t <ANSI_FORMAT> datei.m3u

In welches ANSI Format du umwandeln möchtest, bzw. was mit der vorhandenen iconv version möglich ist findest du mit diesem Befehl heraus.

Code:
$ iconv -l | grep -i ansi
ANSI_X3.4-1968//
ANSI_X3.4-1986//
ANSI_X3.4//
ANSI_X3.110-1983//
ANSI_X3.110//
MS-ANSI//

Als Beispiel müsste das dann so funktionieren:

iconv -f UTF8 -t MS-ANSI datei.m3u
 
  • Like
Reaktionen: powermaniaxx

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Kann ich auch ohne Angabe von der direkten Datei alle Datein im Ordner codieren lassen?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Ich hatte dein Vorhaben mal selbst in ein Skript gepackt:

Code:
#!/bin/bash

OLD_IFS=$IFS
IFS=$'\n'

source=~/test/Playlist-LMS
target=~/test/PlaylistAuto

for f in `find "$source" -type f -regex '.*\.[mM]3[uU]8$' | sort`; do

  source_filename=`basename "$f"`

  target_filename="${source_filename%.m3u8}.m3u"

  cp "$f" "$target"/"$target_filename"

  sed -i -e 's/Music/Musik/g' "$target"/"$target_filename"
  sed -i -e 's/3132-3363//g' "$target"/"$target_filename"

  iconv -f UTF8 -t MS-ANSI "$target"/"$target_filename"

done

IFS=$OLD_IFS

exit 0

Du musst eigentlich nur die Variablen "source" und "target" entsprechend anpassen.
Dann wird die originale Datei mit der Erweiterung *.m3u8 aus dem Quellverzeichnis "source" in das Zielverzeichnis "target" mit der neuen Erweiterung *.m3u kopiert und das Format der Datei(en) im Zielverzeichnis von UTF8 auf ANSI umgestellt.
 
  • Like
Reaktionen: powermaniaxx

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Wenn ich bei sourge und target den Pfad eingebe, bekomme ich die Meldung:
Code:
find: `/var/services/homes/nas/volume1/Sicherung/Playlist-LMS': No such file or director

nas ist der Benutzer, bei Ausführung mit root ist es so:

Code:
find: `/root/volume1/Sicherung/Playlist-LMS': No such file or director
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Und was genau gibst du bei source und target ein?

Das müsste doch in deinem Fall so aussehen:
source=/volume1/Sicherung/Playlist-LMS

Du solltest Tilde „~“ bitte weglassen.
 

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Code:
#!/bin/bash

OLD_IFS=$IFS
IFS=$'\n'

source=/volume1/Sicherung/PlaylistPoweramp
target=/volume1/Sicherung/PlaylistAuto

for f in `find "$source" -type f -regex '.*\.[mM]3[uU]8$' | sort`; do

  source_filename=`basename "$f"`

  target_filename="${source_filename%.m3u8}.m3u"

  cp "$f" "$target"/"$target_filename"

  sed -i -e 's/Music/Musik/g' "$target"/"$target_filename"
  sed -i -e 's/3132-3363//g' "$target"/"$target_filename"

  iconv -f UTF8 -t MS-ANSI "$target"/"$target_filename"

done

IFS=$OLD_IFS

exit 0

Jetzt gehts, ich brauchte den Ordner mit mit den m3u8-Listen als Sourge, damit gehts.

Vereinzelt sind aber noch einige Dateien im UTF-8?

Ich glaube iconf muss ich erst aktivieren, ich versuche nochmal.

Nachtrag: Ich habe iconv unter Script-Spracheinstellungen aktiviert und die Syno neugestartet, aber es ändert sich nichts.

Mit iconv --list müsste ich doch in der Kommandoconsole was angezeigt bekommen?
 
Zuletzt bearbeitet:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Ah okay... ist das bei dir nicht vorhanden?

Dann bekommst du wohl auch mit dem Befehl which iconv auch nicht wie in meinem Fall den Pfad zur binary angezeigt?
/usr/local/bin/iconv

Liegt wohl daran, dass ich auf meinem System folgendes Paket installiert habe.

1671402028262.png


Das Paket bekommst du über eine separate Paketquelle.
http://packages.synocommunity.com

1671402344421.png
 
Zuletzt bearbeitet:
  • Like
Reaktionen: powermaniaxx

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
Jetzt ja, nachdem ich SynoCli installiert habe. Die erstellen Listen im Ausgabeordner sind aber dennoch noch teilweise utf-8 :oops: Ich raffe es nicht warum.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Prüfe doch einmal in welchem Format sich die Dateien tatsächlich befinden.

file -b --mime-encoding datei.m3u

Mach das ganze einmal für eine „gute“ (richtiges Format) und eine „schlechte“ (falsches Format) Datei.
 

powermaniaxx

Benutzer
Mitglied seit
26. Nov 2015
Beiträge
94
Punkte für Reaktionen
6
Punkte
8
UTF-8 und us-ascii

Also anstatt MS-ANSI --> us-asci eintragen?

Habs mal probiert, geht bei einigen Dateien noch immer nicht.

Liegt es vielleicht an einem Leerzeichen bei manchen Wiedergabenlisten?
 
Zuletzt bearbeitet von einem Moderator:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Und welches ist nun welches?

Ich selbst kann dir dabei nicht im Detail helfen. Bisher habe ich solche Code Formatierungen noch nicht vorgenommen und auch deshalb keine Erfahrung.

Ich weiss jetzt auch nicht ob es einen Unterschied gibt wenn man beim iconv Befehl -f UTF8 oder -f UTF-8 verwendet.

ASCII ist eigentlich eine untermenge von UTF-8.
Was bei dir jetzt das eigentliche Problem ist kann ich nicht sagen. Ob es tatsächlich am coding liegt kann ich so nicht bestätigen.

Vielleicht hilft dir ja dieser Thread um evtl. doch noch etwas mehr darüber zu erfahren.
Force encode from US-ASCII to UTF-8 (iconv)
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Liegt es vielleicht an einem Leerzeichen bei manchen Wiedergabenlisten?
Du meinst im Dateinamen?
Nein das sollte nicht der Fall sein.

Die vorherigen Operationen (cp und sed) mit diesen Dateien funktionieren doch auch.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
587
Punkte
174
Okay vielleicht mein Denkfehler… Bei dem Befehl iconv haben wir nur das inputfile definiert.
Und wenn kein Output file definiert wird dann schreibt iconv nur auf die Standard Ausgabe stdout.

The iconv program reads in text in one encoding and outputs the
text in another encoding. If no input files are given, or if it
is given as a dash (-), iconv reads from standard input. If no
output file is given, iconv writes to standard output.

Dann müsste man das Script entsprechend anpassen.
 
  • Like
Reaktionen: powermaniaxx


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!