Inhaltsverzeichnis:

Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer - Gunook
Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer - Gunook

Video: Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer - Gunook

Video: Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer - Gunook
Video: Doppelte Songs in iTunes löschen 2024, Juli
Anonim
Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer
Löschen Sie diese unerwünschten iTunes-Songs von Ihrem Computer

Hey, meine Damen und Herren, dies ist meine erste anweisbare Codierung, also lassen Sie bitte beim Kommentieren Ihre Waffen zu Hause (Messer sind jedoch akzeptabel). Mit dem Aufkommen von MP3-Playern wurde es Menschen ermöglicht, beispiellose Mengen zu tragen von Musik mit ihnen in der Tasche. Es ist nicht ungewöhnlich, von Leuten zu hören, die Sammlungen von 5, 10 oder sogar 15 Tausend Songs haben (und einige Leute sogar noch mehr). Von den MP3-Playern ist keiner beliebter als der iPod von Apple und die darauf basierende Software iTunes. Bei so großen Musikbibliotheken kann es jedoch etwas mühsam werden, die Songs loszuwerden, die einfach nicht gut oder ansprechend klingen du mehr. Es kann ewig dauern, bis Sie Track für Track durch Ihre Musiksammlung in iTunes gehen und die Songs loswerden, die Sie nicht mögen. Hier kommt diese Anleitung ins Spiel. In dieser Anleitung zeige ich Ihnen eine Möglichkeit, Songs automatisch loszuwerden? die einfach nur schrecklich sind, mit etwas Hilfe von meinem guten Freund Perl. Ein gutes Grundwissen über Perl ist äußerst hilfreich, wenn Sie versuchen, dieses instructable zu wiederholen, obwohl es nicht erforderlich ist (Sie könnten sicherlich einfach das fertige Codeprodukt nehmen und kopieren / einfügen) es und es wird gut funktionieren). Für Perl-Interessierte kann ich das Buch "Learning Perl" von O'Reilly wärmstens empfehlen Wenn es richtig gemacht wird, kann und werde ich einfach keine Verantwortung übernehmen, wenn Sie etwas Dummes tun und Ihre wertvollen Songs löschen. Erwägen Sie dringend, Ihre Musikdateien zu sichern, bevor Sie versuchen, ein Skript wie das folgende zu schreiben oder auszuführen. Seien Sie einfach auf der sicheren Seite, damit wir nicht verletzt werden, wenn Sie dies nicht tun. Danke. Lesen Sie die Warnung? (Ja, sogar Sie, Person, die die Warnung nicht gelesen hat) Großartig! Fangen wir an:-) Update: Es scheint, dass einige Perl-Skripter hart daran gearbeitet haben, iTunes-Skripte zu schreiben. Eine Vielzahl von iTunes-bezogenen Skripten finden Sie in Teridons Skripts.

Schritt 1: Erste Schritte

Einstieg
Einstieg

Wie bei allen Dingen müssen einige Vorbereitungen getroffen werden, bevor wir dieses Skript ausführen können. Also, Dinge, die Sie brauchen, um Songs automatisch aus iTunes zu löschen: 1) Ein Computer (duh) 2) iTunes (doppelt duh) 3) Perl (es ist schwer, ein Perl-Skript ohne Perl auszuführen, würdest du nicht sagen?) 4) Ihr Lieblingseditor (ich bin selbst ein Befürworter von vi und vim, aber jeder Texteditor sollte es tun)5) Ein iPod (nicht obligatorisch, aber aus Gründen, die bald klar werden werden, schön zu haben)Perl bekommen: Folgen Sie den Die Anweisungen hier sollten einfach genug sein: https://www.perl.com/download.cspSobald Sie Perl heruntergeladen, installiert und bereit zum Starten haben, möchten wir einige Hintergrundinformationen darüber, was wir tun. Es sollte beachtet werden, dass das Skript ursprünglich für Mac OS X entwickelt wurde, obwohl die gleichen Methoden auch auf Nicht-Unix-basierten Betriebssystemen wie Windows funktionieren sollten. Zeit für den langweiligen, äh, "pädagogischen" Teil des Instructable.

Schritt 2: Die grundlegende Skriptidee

iTunes enthält ein 5-Sterne-Bewertungssystem, mit dem Benutzer Songs bewerten können. Songs mit einer 5-Sterne-Bewertung gelten als die besten Songs, während Songs mit einer 1-Stern-Bewertung als einige der schlechtesten Songs gelten. Für unsere Zwecke gehen wir davon aus, dass jeder Song ohne Bewertung (auch bekannt als 0 Sterne) ein Song ist, den der Benutzer noch nicht bewerten konnte finde es wahrscheinlich schlimm genug, dass es den kostbaren Festplattenspeicher, den das Lied einnimmt, nicht verdient. Daher analysiert das Perl-Skript, das ich Ihnen in diesem Instructable präsentiere, die iTunes-Bibliothek und löscht alle Tracks, denen eine 1-Stern-Bewertung zugewiesen wurde. Als zusätzlichen Bonus können die Songs bewertet werden, während der Benutzer unterwegs ist einen iPod verwenden. Auf diese Weise können Sie unterwegs Songs zum Löschen auswählen, indem Sie sie einfach bewerten, und sie werden automatisch gelöscht, wenn Sie Ihren iPod später mit Ihrem Computer synchronisieren (wenn Sie Ihren iPod automatisch mit Ihrem Computer synchronisieren). Jetzt wissen wir was Mal sehen, wie wir Song-Informationen aus iTunes für das Perl-Skript abrufen.

Schritt 3: Die XML-Bibliothek: ITunes' Goto Guy

Die XML-Bibliothek: ITunes' Goto Guy
Die XML-Bibliothek: ITunes' Goto Guy

Um einen Song basierend auf seiner Bewertung vom Computer zu löschen, benötigen wir 2 Informationen: die Bewertung des Songs und den Ort des Songs. Zum Glück für uns gibt es eine praktische Datei, aus der wir alle Informationen erhalten können, die wir schon immer über iTunes wollten: die iTunes Music Library XML-Datei. Die XML-Datei heißt "iTunes Music Library.xml" und sollte sich in Ihrem Musikverzeichnis auf Ihrer Hauptfestplatte befinden.

Über die XML-Datei: Die iTunes-XML-Datei ist eine Art Datenbank, die von iTunes verwaltet und immer auf dem neuesten Stand gehalten wird. Wenn in iTunes eine Änderung vorgenommen wird, wird der entsprechende Teil der iTunes-XML-Datei geändert, um diese Änderung zu beachten. Ein Beispieleintrag aus meiner iTunes-XML-Datei ist unten aufgeführt: 1218Track ID1218NameTake On MeArtistA-HaGenre80'sKindMPEG audio fileSize3682382Total Time230138Date Modified2007-09-24T02:11:30ZDate Added2008-05-28T05:00:24ZBit Rate128Sample Rate4432TC Count20082Play Date 25T01:26:58ZRating40Album Rating40Album Rating ComputedPersistent ID9AC5DB9713240B44Track TypeFileLocationfile://localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album/Take%20On%20Me.mp3File Folder Count4Library Folder Count1As kann aus dem obigen Eintrag gesehen werden. die XML-Datei besteht aus Werten, die von Tags im HTML-Stil umgeben sind. Für die Zwecke des Skripts interessieren uns die Informationen zu Track-ID, Name, Interpret, Bewertung und Ort. Wenn Sie sich die XML-Datei ansehen, können Sie von oben feststellen, dass dieser Song eine "Bewertung" von 40 hat. iTunes weist jedem Song eine ganze Zahl von 0 bis 100 zu, wobei alle 20 Punkte ein zusätzlicher Stern für die Bewertung sind. Eine Bewertung von 20 entspricht also einer 1-Stern-Bewertung, eine Bewertung von 40 einer 2-Sterne-Bewertung und so weiter, wobei 100 einer 5-Sterne-Bewertung entspricht. Nun, da wir über die XML-Datei Bescheid wissen, beginnen wir mit der Skripterstellung

Schritt 4: Dein Freund das Haschisch (auch wenn du nicht in Amsterdam bist)

Dein Freund das Haschisch (auch wenn du nicht in Amsterdam bist)
Dein Freund das Haschisch (auch wenn du nicht in Amsterdam bist)

Bevor wir Dateien eliminieren können, benötigen wir eine funktionierende Datenbank, die alle Songinformationen miteinander verbindet. Auch wenn komplexere Datenstrukturen wie ein Array von Hashes oder ein Hash von Hashes verwendet werden könnten, ist dieses Skript einfach genug, um die Verwendung einer einfachen Liste von Hashes zu rechtfertigen. Für den Uneingeweihten ist ein Hash nichts anderes als ein Array, das wird durch Strings oder eine durcheinandergebrachte Masse von Schlüssel/Wert-Paaren indiziert. Man kann sich einen Hash als ein großes Fass mit Zeug (den Werten) vorstellen, und alles in dem metaphorischen Fass ist mit einem Tag (den Schlüsseln) verbunden. Sie können jeden Gegenstand im Fass herausziehen, indem Sie einfach sein Etikett finden. Für weitere Informationen zu Hashes kann der folgende Link nützlich sein: https://www.tutorialspoint.com/perl/perl_hashes.htmWir können die Information verwenden, dass jedem Song in der iTunes XML-Datei eine eindeutige Track-ID zugewiesen ist, um den Überblick zu behalten Die Lieder. Aus diesem Grund ist die trackID ein idealer Schlüssel für die Hashes. Daher können wir 4 Hashes für Songtitel, Interpret, Bewertung und Standort einrichten. Sobald diese eingerichtet sind, können wir die Datei durchsuchen und unsere Hash-Datenbank mit einigen einfachen regulären Ausdrücken füllen, die als nächstes gezeigt werden.

Schritt 5: Eine (sehr) kurze Lektion zu regulären Ausdrücken

Um unsere Hash-Einträge aus der XML-Datei zu holen und auch ein wenig Zeit beim Suchen zu sparen, möchten wir eine der leistungsstärkeren Funktionen von Perl in Anspruch nehmen: den regulären Ausdruck. Ich werde eine sehr kurze Lektion zu regulären Ausdrücken machen, aber für diejenigen unter Ihnen, die detailliertere Erklärungen wünschen, gibt es viele gute Tutorials zu regulären Ausdrücken online. Eine gute Anleitung zu regulären Ausdrücken finden Sie unter https://perldoc.perl.org/perlretut.html eine Zeichenfolge für die spätere Verwendung. Reguläre Ausdrücke bieten 2 Funktionen, die Vergleichsoperatoren (m//) und Ersetzungsoperatoren (s//), die für dieses Projekt verwendet werden. Um eine dieser Funktionen in einem Zuweisungskontext zu verwenden, verwenden wir den Bindungsoperator (=~) von Perl, der verwendet wird, um ein Muster an eine beliebige Stringvariable zu binden. Beispiele:

$Kommentar =~ /Purduecer/; #gibt true zurück, wenn $comment string die Phrase "Purduecer"s/[a-z]/[A-Z]/ enthält; #nimm alle Kleinbuchstaben in string und schreibe sie in $_ stringEin zweites nützliches Merkmal von regulären Ausdrücken sind Speichervariablen. In regulären Ausdrücken können Sie bestimmte Elemente in Klammern setzen und dann die speziellen Mustervergleichsspeichervariablen $1, $2 usw. verwenden, um später auf die Teile der Strings zuzugreifen, die mit diesen Teilen übereinstimmen. Beispiele

/(Instructables) Roboter/; #Machen Sie eine beliebige Zeile mit dem Satz "Instructables Robot"$website = $1; #Speichern Sie das Ergebnis der erfolgreichen Musterübereinstimmung im ersten Satz von Klammern # (in diesem Fall enthält die Variable $1 "Instructables")Schließlich gibt es in regulären Ausdrücken bestimmte Zeichen, die einem besonderen Zweck dienen. Dies sind Backslash-Escapes (die C-Programmierern alle bekannt vorkommen sollten), Zeichenklassen und Metazeichen. Um beispielsweise einen einzelnen Buchstaben mit einem Tab auf beiden Seiten zu finden, könnten wir sagen:

/\t[a-zA-Z]\t/Diese eckigen Klammern werden in regulären Ausdrücken verwendet, um eine Zeichenklasse zu definieren. Nehmen wir jedoch an, wir möchten Text in eckigen Klammern in der Zeile finden. Wir könnten es nicht einfach so schreiben, wie es unten gezeigt wird

/

/

Schritt 6: Anwenden von regulären Ausdrücken auf das ITunes-Skript

Anwenden von regulären Ausdrücken auf das ITunes-Skript
Anwenden von regulären Ausdrücken auf das ITunes-Skript

Nun, da wir hoffentlich ein wenig Ahnung von den grundlegenden Konzepten haben, die regulären Ausdrücken zugrunde liegen, ist es an der Zeit, diese auf das iTunes-Skript anzuwenden. Beim Lesen von XML-Code werden bestimmte Zeichen wie der Schrägstrich ziemlich häufig angetroffen. Daher werden wir uns die Tatsache zunutze machen, dass Sie mit dem m//-Operator beliebige Trennzeichen im Code auswählen können (wir verwenden eckige Klammern, obwohl andere Trennzeichen sicherlich funktionieren) die vollständige iTunes XML-Datei. Teile der Datei, die Informationen wie Wiedergabelisten usw. enthalten, sind nicht erforderlich. Die erste Zeile des Abschnitts Playlists, die nach den Songinformationen folgt, sieht wie folgt aus: PlaylistsDaher können wir in einer while-Schleife eine Anweisung einfügen, die an das Ende des Dateilesens springt, wenn diese Zeile gefunden wird.

while() { #loop_instructions_here last if($_ =~ m[Playlists])}Um die Hash-IDs zu erstellen, können wir als Nächstes einen if-elsif-Baum verwenden, um unsere Datenbank-Hashes zu erstellen, indem wir die im vorherigen Schritt gelernten Speicher-Match-Variablen verwenden, um Werte in den Hashes zu speichern

if($_ =~ m[(d+)]) { $id = $1; } elsif($_ =~ m[Bewertung(d+)]) { $rate_hash{$id} = $1; } elsif($_ =~ m[Name(.+)]) { $name_hash{$id} = $1; } elsif($_ =~ m[Künstler(.+)]) { $art_hash{$id} = $1; } elsif($_ =~ m[Locationfile://localhost(.*)]) { $loc_hash{$id} = $1; }Nachdem wir nun die Grundlage unserer Hash-Datenbank erstellt haben, werden wir uns mit dem Auffinden und Entfernen von 1-Stern-Dateien befassen, also weiter zum nächsten Schritt!

Schritt 7: Suchen und Löschen dieser 1-Stern-Tracks

Auffinden und Löschen dieser 1-Stern-Tracks
Auffinden und Löschen dieser 1-Stern-Tracks

Nachdem wir unsere Datenbank eingerichtet haben, ist es an der Zeit, nach den 1-Stern-Tracks zu suchen, damit wir sie löschen können. Perl bietet ein nützliches Schleifenkonstrukt namens foreach-Schleife, das verwendet werden kann, um alle Schlüssel unserer Hashes zu durchlaufen. Beachten Sie, dass nicht jeder Track in Ihrer iTunes-Bibliothek einen Eintrag im Bewertungs-Hash hat. Dies liegt daran, dass Songs ohne Bewertung keine Titelbewertungszeile in der iTunes XML-Datei erhalten. Daher möchten wir beim Durchlaufen der Hashes das folgende Konstrukt verwenden:

foreach $id (Sortierschlüssel %rate_hash) { #…Schleifencode hier einfügen}Danach ist es so einfach wie die folgende Anweisung

entlinke $loc_hash{$id} if $rate_hash{$id} == 20;Die im obigen Beispielcode verwendete Unlink-Funktion ist Perls Methode zum Löschen von Dateien. Sie könnten versucht sein, einen Systemaufruf für die Löschfunktion Ihres Betriebssystems zu verwenden, aber aus Gründen der Portabilität verwendet der von mir geschriebene Code nicht den Systemaufruf. Wir haben jetzt die grundlegende Struktur für unseren Code. In den folgenden Schritten werden wir einige Verfeinerungen am Code vornehmen, damit Sie ein voll funktionsfähiges Skript haben, um diese lästigen 1-Sterne loszuwerden.

Schritt 8: URI-Escapes und wie man sie umgeht

Wenn Sie versuchen, das Skript unverändert auszuführen, treten zahlreiche Fehler Ihres Betriebssystems auf, und wenn Sie sich die Dateipfade ansehen, die Sie löschen möchten, finden Sie möglicherweise ungewöhnliche Zeichen, die unerwünscht in den Pfaden eingebettet sind. Es besteht eine ziemlich gute Chance, dass diese Pfade URI-Escape-Zeichen enthalten. Was sind URI-Escapes? In HTML und XML sind URI-Escape-Zeichen (auch bekannt als URI-Escapes) spezielle Metazeichen, die verwendet werden, um nach wörtlichen Instanzen dieses Zeichens zu suchen. Beispielsweise werden Sie in einer XML-Zeichenfolge nie ein einfaches Leerzeichen sehen. Sie sehen jedoch die XML-Darstellung eines einfachen Leerraums, %20. (Sicher haben Sie diese in der URL-Leiste Ihres Browsers gesehen und sich gefragt, was sie waren. Nun, jetzt wissen Sie es) Ein URI-Escape besteht aus einem %-Zeichen gefolgt von einem 2-stelligen Hexadezimalcode, der den ASCII-Wert des Zeichens darstellt Punkt, Sie könnten eine ganze Reihe von replace-Anweisungen für den Location-Hash schreiben, um jedes mögliche Metazeichen zu ersetzen, auf das Sie stoßen (zB $loc_hash{$id} =~ s/%20/ /; und so weiter). Glücklicherweise bietet Perl jedoch eine bessere Möglichkeit, sich um diese Dinge zu kümmern. Perl wird mit einem Modul namens URI::Escape geliefert, das eine eingebaute Funktion uri_unescape hat, die die Aufgabe übernimmt, die URI-Escapes für uns zu eliminieren. Um das Modul zu verwenden, fügen Sie einfach die folgende Zeile am Anfang Ihres Codes hinzu:

URI verwenden::Escape;Nachdem wir nun das Array $loc_hash{$id} in der XML-Dateischleife zugewiesen haben, können wir anschließend die folgende Zeile hinzufügen

uri_unescape($loc_hash{$id});Die obige Zeile eliminiert automatisch alle URI-Escape-Zeichen. Als zusätzlichen Bonus übersetzt es auch einige internationale Zeichen. Ich habe das Skript mit einigen Dateipfaden ausgeführt, die japanische Konji enthielten, und die Funktion uri_unescape übersetzte die XML-Formate dieser Zeichen in ihre ursprünglichen Zeichen, damit die Verknüpfung erfolgreich gelöscht werden konnte. Bevor wir fortfahren, muss ein zusätzlicher Schritt ausgeführt werden. Aus Gründen, die ich nicht ganz verstehe, codiert iTunes das kaufmännische Und-Zeichen (&) als & in seinen Zeichenfolgen. Wenn jemand weiß, warum das so ist, lass es mich wissen. In der Zwischenzeit beheben wir dieses Problem, indem wir die folgende Zeile unter der Zeile uri_unescape hinzufügen

$loc_hash{$id} =~ s/&#/&/;Jetzt hat das Skript Dateipfade ohne seltsame Zeichen, und die Funktion zum Aufheben der Verknüpfung kann Dateien an ihren richtigen Speicherorten finden, um sie zu löschen. Nun, das wird es, wenn Sie Mac OSX verwenden (und vermutlich auch die meisten anderen Unix-basierten Betriebssysteme). Lesen Sie weiter, um das Skript mit anderen Betriebssystemen (insbesondere Windows) kompatibel zu machen.

Schritt 9: Skriptkompatibilität zu Windows hinzufügen

Skriptkompatibilität zu Windows hinzufügen
Skriptkompatibilität zu Windows hinzufügen

Das Skript, wie es bisher geschrieben wurde, entfernt effektiv Spuren auf Unix-basierten Betriebssystemen. Damit es unter Windows funktioniert, ist eine kleine Ergänzung erforderlich. Im Gegensatz zu Mac und anderen Unix-basierten Betriebssystemen unterstützt Windows das Konzept eines einzelnen Stammverzeichnisses nicht. Daher beginnen alle Pfadnamen mit einem Volume (C: oder E: oder jedem anderen Buchstaben, den Sie sich vorstellen können) im Gegensatz zum Root-Verzeichnis (/). Zum Glück für uns hat Perl eine spezielle Variable, $O (das ist ein großes o, keine Null), das uns sagt, welches Betriebssystem wir gerade verwenden. Wenn der in dieser Variable gespeicherte Wert also "Win" enthält, möchten wir den führenden Schrägstrich aus unserem XML-Speicherort-Dateipfad entfernen. Dies kann mit der folgenden Codezeile erfolgen (hinzugefügt, nachdem wir die Position eines Tracks aus der XML-Datei erfolgreich geparst haben):

$loc_hash{$id} = substr($loc_hash{$id}, 1) if $^O =~ /Win/i;Jetzt funktioniert das Skript unabhängig davon, ob es unter OS X oder Windows ausgeführt wird.

Schritt 10: Das fertige Skript

Das fertige Skript
Das fertige Skript

Anbei ist meine Version des fertigen iTunes-Autodeletion-Skripts für diejenigen unter Ihnen, die nur das Endprodukt und nicht die Erklärung zur Funktionsweise haben wollten.

Um das Skript zu verwenden, müssen Sie die Datei als Perl-Datei (.pl-Erweiterung) speichern und dann ausführbar machen (chmod 751 in Unix, nicht sicher, was es für Windows-Systeme ist).

Empfohlen: