DiamondFlow
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
Hi, ich bin eine einigermaßen versierte Ubuntu Linux Userin, und das schon viele Jahre. Die allermeisten meiner Problemchen habe ich durch intensive Internet-Recherche auch lösen können. An diesem Problem hänge ich aber schon seit Monaten fest. Bisher hat mir da noch niemand weiterhelfen können. Ich bin Hobby-DJ und benutze Mixxx auf Ubuntustudio. Ein großer Teil meiner Musikbibliothek besteht aus Aufnahmen von Internet-Radio-Streams. Leider ist eine großer Teil davon Schrott, weil entweder vorne oder hinten etwas fehlt, oder der Moderator hat rein gequatscht etc. All diese unbrauchbaren Dateien habe ich in Mixxx einer Playlist "Müll" zugeordnet. Playlists können im M3U, M3U8, PLS, Text-CSV oder TXT Datei exportiert werden. Als CSV kann ich diese dann z.B. in Libreoffice importieren. Dort gibt es dann unter anderem eine Spalte mit dem genauen Pfad zur Datei. Ich hatte diese Spalte als Text exportiert. Die damit kreierte Liste habe ich dann versucht mit einem Shell-Befehl/Script löschen zu lassen. Das Problem ist, dass die Dateinamen jede Menge Sonderzeichen enthalten. Alle meine Versuche sind daran gescheitert. Das sieht dann z.B. so in der Textverarbeitung aus:
/Path/To/File/Unbekannter Künstler - A�cha Khaled(2).mp3 Einer der Shell-Befehle, die ich im Internet irgendwo gefunden hatte war dies: mawk -v q='"' '$0 = "rm -r " q $0 q' /Path/To/File/Müll.txt | sh
Leider steigt der Befehl mit einer Fehlermeldung aus, sobald dieser auf eine Datei mit Sonderzeichen trifft. Die Müll-Playlist ist inzwischen auf >13000 Dateien angewachsen und ich würde gerne aufräumen und Platz auf der Festplatte machen. Vielen Dank
Marina Hildebrand (DiamondFlow)
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4425
Wohnort: Göttingen
|
Hm, hast Du mal ein paar Beispielzeilen, die Probleme bereiten? Und kannst Du mal zeigen, wie die Ausgabe mit ls für dies Dateien aussieht? Und vielleicht auch noch ein die entsprechenden problematischen Zeilen aus der CSV.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12987
|
Willkommen hier im Forum! Ich nehme ja gerne Ruby für so etwas: 1
2
3
4
5
6
7
8
9
10
11
12 | #!/usr/bin/ruby
require 'csv'
COL = 3
CSV.foreach(ARGV.shift) do |rec|
file = rec[COL]
puts "Deleting #{file}"
# uncomment to activate:
# File.unlink(file)
done
|
Möglicherweise muss man noch das Encoding richtig setzen. | CSV.foreach(ARGV.shift, encoding: "ISO8859-1") do |rec|
|
Man kann auch erst mal binär versuchen: | CSV.foreach(ARGV.shift, encoding: "BINARY") do |rec|
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17574
Wohnort: Berlin
|
Eine Möglichkeit wäre auch, iconv zu benutzen, um die Dateiliste zu konvertieren. Das ist ja, was für Bytes i.d. Liste gespeichert sind, das andere was Programme anzeigen, und das dritte, was das Dateisystem für ein Encoding benutzt. Wenn die Dateien auf einem Linuxfilesystem liegen (ext4, btrfs, reiserfs, ...), dann sind sie dort wahrscheinlich utf-8 kodiert. Mit
| iconv -f iso-8859-15 -t utf-8 list.m3u
|
habe ich geschaut, was aus Deinem Beispiel rauskommt, aber nichts gefunden, was A�cha Khaled in etwas lesbares konvertiert, wobei beim Copy-Paste i.d. Browser und bei desssen Speicherung und dem Transfer zu mir womöglich Informationen verändert wurden. Iso-8859-15 ist das Format, das vor utf-8 am verbreitetsten war. Für Windows wären noch andere Formate gängig, aber Du sagst ja, dass die Erfassung schon unter Linux passiert ist. 1
2
3
4
5
6
7
8
9
10
11
12 | #!/bin/bash
#
# In einer Datei einen bekannten (Teil-)String (z.B.: Begrüßung) suchen,
# indem alle Encodings ausprobiert werden.
#
[[ $# -ne 2 ]] && echo "Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE" && exit
FILE=$1
PATTERN=$2
for enc in $( iconv -l | sed 's/..$//')
do
iconv -f $enc -t UTF-8 $FILE 2>/dev/null | grep -m 1 $PATTERN && echo $enc
done
|
Dieses Script probiert stur alle Encodings aus, und sucht nach einem String - etwa "Aícha" (kein i!), der als 2. Parameter, nach dem Dateinamen, angegeben werden muss. Wenn nichts gefunden wird - vielleicht hast Du mehr Erfolg, bei der ursprüngl. m3u-Datei, oder was das Quellformat war - vielleicht ging's auf dem Weg zu Libreoffice (?) schon kaputt.
|
homer65
Anmeldungsdatum: 8. November 2005
Beiträge: 557
Wohnort: bochum, germany
|
Wieviel Prozent der Dateien haben denn Sonderzeichen im Namen? Wenn nur wenige Dateien davon betroffen sind macht es vielleicht Sinn erst mal nur die ohne Sonderzeichen zu löschen. Und den Rest händisch zu löschen.
|
DiamondFlow
(Themenstarter)
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
homer65 schrieb: Wieviel Prozent der Dateien haben denn Sonderzeichen im Namen? Wenn nur wenige Dateien davon betroffen sind macht es vielleicht Sinn erst mal nur die ohne Sonderzeichen zu löschen. Und den Rest händisch zu löschen.
Das ist ja genau das Problem... Es sind leider die meisten Dateien, die mindestens ein Sonderzeichen enthalten.
|
juribel
Anmeldungsdatum: 20. April 2014
Beiträge: 1180
|
Moin, die Dateinamen scheinen tatsächlich auf dem Weg kaputt gegangen zu sein. Dieses Sonderzeichen in A�cha ist das Unicode-Zeichen u+fffd. Und das ist tatsächlich die schwarze Raute mit dem weissen Fragezeichen. Wie sehen die Namen denn vor dem Export als csv aus? Und wie im Player? Sind sie da noch heile oder auch schon kaputt? Beim Aufnehmen aus Radiostreams kommen tatsächlich schon mal kaputte Dateinamen an.
|
DiamondFlow
(Themenstarter)
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
Doc_Symbiosis schrieb: Hm, hast Du mal ein paar Beispielzeilen, die Probleme bereiten? Und kannst Du mal zeigen, wie die Ausgabe mit ls für dies Dateien aussieht? Und vielleicht auch noch ein die entsprechenden problematischen Zeilen aus der CSV.
sh: 1: sullivan: not found
rm: das Entfernen von '/media/MusikMixxx/hr4/Gilbert Os Weiter +++ Mehr Infos Auf Www.Oldies192fm.De +++ (36).mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: des: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 02 I Habner Stern Von Avignon.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 2: ruck.mp3
rm -r /media/MusikMixxx/Radio: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 05 Lings Rechts Vor Zruck (1).mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: hörn: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 06 Mir Zwoa Gm Tal.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: s: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 09 Auch Früher Warsmich Schon Auf Dic.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: dirndl: not found
sh: 1: s: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 09 Swill Ichs Heimatlie.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: n: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 11 Wir Sehwettertanne.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 2: winterzit.mp3
rm -r /media/MusikMixxx/Radio: not found
rm: das Entfernen von '/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 15 D.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: Ich: not found
rm: das Entfernen von '/media/MusikMixxx/Discofox-Funradio Das gute Laune Radio/Unbekannter Künstler - Christian Franke-Doch Schweigen Werds My Life.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: On: not found
rm: das Entfernen von '/media/MusikMixxx/hr1/Bon Jovi - Livin On A Prayer (1).mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 9: 70s/Supertramp - Its Raining Again.mp3"
rm -r "/media/MusikMixxx/SAW - Rock/Supertramp - Its Raining Again.mp3"
rm -r "/media/MusikMixxx/SAW - Rock/Supertramp - Its Raining Again (1).mp3"
rm -r "/media/MusikMixxx/SAW - Rock/Supertramp - Its Raining Again (2).mp3"
rm -r "/media/MusikMixxx/SAW - Rock/Supertramp - Its Raining Again (3).mp3"
rm -r "/media/MusikMixxx/SAW - Rock/Supertramp - Its Raining Again (4).mp3"
rm -r "/media/MusikMixxx/radio SAW-Rock/Supertramp - Its Raining Again Saw-Rock.mp3"
rm -r "/media/MusikMixxx/Flower Power Radio - 50s: not found
sh: 1: s: not found
rm: das Entfernen von '/media/MusikMixxx/hr1/Osterchallenge/Supertramp - It Alive.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 2: Alive.mp3
rm -r /media/MusikMixxx/Rock/Foreigner: not found
rm: das Entfernen von '/media/MusikMixxx/hr4/Bee Gees - Stayin Stevens - Oh Julie.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: n: not found
rm: das Entfernen von '/media/MusikMixxx/hr1/Joan Jett And The Blackhearts - I Love Rockroll.mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 1: n: not found
rm: das Entfernen von '/media/MusikMixxx/hr1/Joan Jett And The Blackhearts - I Love Rockroll (1).mp3' ist nicht möglich: Datei oder Verzeichnis nicht gefunden
sh: 5: Syntax error: Unterminated quoted string /media/MusikMixxx/hr4/Gilbert O`sullivan - Clair.mp3
/media/MusikMixxx/OLDIES 192 FM - Schlager & Pop/Unbekannter Künstler - Sendepause +++ Um 12 Uhr Geht`s Weiter +++ Mehr Infos Auf Www.Oldies192fm.De +++ (36).mp3
/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 02 I Hab`des Schlüsserl Tz Dei.mp3
/media/MusikMixxx/Radio Alpenmelodie/Unbekannter Künstler - - 03 Gold`ner Stern Von Avignon.mp3 Für mich sieht das so aus als ob das Zeichen "Hochkomma" den meisten Ärger macht. Das ist die Taste rechts neben dem ß/? bzw. links neben dem "Backspace"
|
DiamondFlow
(Themenstarter)
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
juribel schrieb: Moin, die Dateinamen scheinen tatsächlich auf dem Weg kaputt gegangen zu sein. Dieses Sonderzeichen in A�cha ist das Unicode-Zeichen u+fffd. Und das ist tatsächlich die schwarze Raute mit dem weissen Fragezeichen. Wie sehen die Namen denn vor dem Export als csv aus? Und wie im Player? Sind sie da noch heile oder auch schon kaputt? Beim Aufnehmen aus Radiostreams kommen tatsächlich schon mal kaputte Dateinamen an.
nachdem ich den Befehl nochmal habe laufen lassen, hat sich die Anzahl der Dateien auf etwas über 7000 verringert. Probleme machen aber offensichtlich Dateien, die das Hochkomma im Namen haben wie z.B. diese:
/media/MusikMixxx/hr4/Gilbert O`sullivan - Clair.mp3
Die anderen Vorschläge muss ich erst eine nach der anderen durcharbeiten.
|
juribel
Anmeldungsdatum: 20. April 2014
Beiträge: 1180
|
Das sind Backticks, und die werden von der Shell interpretiert als Anfang eines Befehls, der in einer Subshell ausgeführt werden soll. Vielleicht hilft es, die Dateinamen zu quoten, also in einfache oder doppelte "richtige" Anführungszeichen einzubetten.
|
DiamondFlow
(Themenstarter)
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
rklm schrieb: Willkommen hier im Forum! Ich nehme ja gerne Ruby für so etwas: 1
2
3
4
5
6
7
8
9
10
11
12 | #!/usr/bin/ruby
require 'csv'
COL = 3
CSV.foreach(ARGV.shift) do |rec|
file = rec[COL]
puts "Deleting #{file}"
# uncomment to activate:
# File.unlink(file)
done
|
Möglicherweise muss man noch das Encoding richtig setzen. | CSV.foreach(ARGV.shift, encoding: "ISO8859-1") do |rec|
|
Man kann auch erst mal binär versuchen: | CSV.foreach(ARGV.shift, encoding: "BINARY") do |rec|
|
Leder gehen meine Programmier-Kenntnisse nicht weit genug um diese Script zu benutzen.
beim Starten bekomme ich dies:
marina@marina-latitudee6440:~/Schreibtisch$ ./delete.sh
./delete.sh:12: syntax error, unexpected end-of-input, expecting `end' bzw. marina@marina-latitudee6440:~/Schreibtisch$ ./delete.sh Müll.txt
./delete.sh:12: syntax error, unexpected end-of-input, expecting `end' Was muss ich dem Script als Argument übergeben?
|
DiamondFlow
(Themenstarter)
Anmeldungsdatum: 16. März 2023
Beiträge: 9
|
juribel schrieb: Das sind Backticks, und die werden von der Shell interpretiert als Anfang eines Befehls, der in einer Subshell ausgeführt werden soll. Vielleicht hilft es, die Dateinamen zu quoten, also in einfache oder doppelte "richtige" Anführungszeichen einzubetten.
Schön... und wie?
|
juribel
Anmeldungsdatum: 20. April 2014
Beiträge: 1180
|
Ich dachte, du hättest da was geskriptet, und dann müsstest du wissen, wo die Variable mit dem Dateinamen steht. Einfach in doppelte oder einfache Hochkommas einschliessen. Ist es dieses Skript "./delete.sh"? Wenn es nicht von dir ist, kann dir bestimmt der Autor weiterhelfen. Variablen, in denen Leerzeichen oder solche Backticks vorkommen können, müssen immer gequotet werden. Ich weiss das, denn ich vergess das auch immer.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17574
Wohnort: Berlin
|
juribel schrieb: Ich dachte, du hättest da was geskriptet, und dann müsstest du wissen, wo die Variable mit dem Dateinamen steht. Einfach in doppelte oder einfache Hochkommas einschliessen.
Nein, nicht einfach, sondern schon ein wenig elaboriert: In Apostrophe einschließen (Kommas sind immer tief, Hochkommas gibt es nicht), nicht in Gänsefüßchen - das macht einen Unterschied. (Dieser Hinweis gilt für Shellskripte - zu Python/Ruby kann ich mich als Outsider nicht äußern.) Backticks sind keine Apostrophe, sondern eine Form von Akzentzeichen, im franz. Accent Grave, der dt. Name ist mir nicht geläufig. Aber Akzentzeichen sind auch keine Form von Komma, weder hoch, noch tief. 😉
|
TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 863
|
Ich würde die Dateinamen gleich aus der Müll Playlist holen, die du in Mixxx als .m3u exportierst while read -r -d $'\n' f; do [ -f "$f" ] && echo rm "$f"; done < <(grep ^/media/MusikMixxx/ /Path/To/File/Müll.m3u)
Wenn dir die ausgegebene Liste plausibel erscheint, kannst du das echo entfernen und die Dateien werden tatsächlich gelöscht. Gruß TNT
|