Ta bort de oönskade iTunes-låtar från datorn (8 / 10 steg)
Steg 8: URI rymningar och hur man får runt dem.
Om du försöker köra skriptet som är, du kommer stöter många fel från ditt operativsystem, och om man tittar på de sökvägar som du försöker ta bort, kan du hitta ovanliga tecken inbäddade i de vägar som är oönskade. Det finns en ganska bra chans att dessa vägar innehåller URI escape-tecken.Vad är URI flyr? I HTML- och XML-, URI fly tecken (aka URI undgår) är speciella metatecken används för att söka efter bokstavlig förekomster av denna karaktär. Till exempel kommer du aldrig se ett enkelt blanksteg i ett XML-strängen. Du kommer dock se XML-representation av ett enkelt blanksteg, % 20. (Säkert du har sett dessa i adressfältet i webbläsaren och undrade vad de var. Tja, nu vet du) består A URI flykten av ett %-tecken följt av en 2-siffriga hexadecimala kod som representerar tecknets ASCII-värdet.
Vid denna punkt, du kunde skriva en hel massa Ersätt uttalanden på plats hash att ersätta alla tänkbara metatecken att du stöta (dvs. $loc_hash {$id} = ~ s/%20/ /, och så vidare). Lyckligtvis dock ger Perl ett bättre sätt att ta hand om dessa saker.
Perl kommer stuvat med en modul som kallas URI::Escape, som har en inbyggd funktion, uri_unescape, som kommer att göra jobbet av elliminating URI flyr för oss. För att använda modulen, enkelt tillägga den följande lina på toppen av din kod:
Använd URI::Escape;
Nu, när vi tilldelar arrayen $loc_hash {$id} i en XML-fil slinga, vi kan lägga till följande rad efteråt:
uri_unescape($loc_hash{$ID});
Ovanstående linje automatiskt elliminates någon URI escape-tecken. Som en extra bonus översätter den några internationella tecken också. Jag sprang skriptet med några filepaths att hade japanska konji i dem, och funktionen uri_unescape översatt XML formaten av dessa tecken till deras ursprungliga tecken så som avlänka kunde lyckas ta bort filen.
Innan vi går vidare, måste ett ytterligare steg tas. Av skäl som jag inte förstår, kodar iTunes ampersand (&) symbolen som & det är strängar. Om någon vet varför detta är, låt mig veta. Under tiden vi kaotiskt problemet genom att lägga till följande rad under uri_unescape fodra:
$loc_hash {$id} = ~ s / & #/ & /;
Skriptet har nu filepaths klart av konstiga tecken, och Bryt länk funktion kommer att kunna hitta filer på rätt plats att ta bort dem. Ja, kommer det om du använder Mac OSX (och förmodligen de flesta andra Unix-baserade operativsystem också). Läs vidare för att göra skriptet kompatibel på andra operativsystem (nämligen Windows).