15. maj 2004 - 14:55Der er
4 kommentarer og 1 løsning
Løb filerne igennem, læs første linie og omdøb evt. filnavn
Jeg er ude efter et lille perl script der kan løbe et bibliotek igennem (inkl. alle subdirs), læse de første par linier i filen (musik-filer) og derefter give filen den korrekte endelse (mp3 eller ogg).
Jeg ved at der i headeren på .ogg musik filerne står "Oggs" og at der i mp3 filerne (selvfølgelig) ikke står "Oggs".
Hele miseren skyldes en forkert navngivning af fil-endelsen da jeg rippede min musiksamling (DOUGH!!).
Så scriptet skal gennemløbe et bibliotek (inkl. subdirs), scanne alle filer med .ogg endelse, se efter om det virkelig er en .ogg fil, hvis ikke så navngivning til mp3.
Er der nogen der kan lave sådan et script til mig? Jeg er nemlig ikke selv en haj til perl, men jeg tror det er rimeligt enkelt. Shell scripts kan også bruges, bare så længe det kan afviklses på en linux platform.
use FileHandle; use strict; #use warnings; my $filename ="/tmp/test"; my $line; my $fh = new FileHandle("< $filename"); my $path; while (<$fh>) { $line = $_; if ($line =~ /lykke/i) { chomp($line); $path=$line; $path = substr($path, 0, - 1); $path = "$path"."/"; ##Make it a valid unit path to the current director y we're in # print "$path\n"; } my $file = "$path"."$line"; ##Get the absolute path # print $file; my $musicFile = new FileHandle("< $file"); while(<$musicFile>){ my $musicLine = $_; if ($musicLine =~ /LAME3.93/i) { ## If it's a mp3 file # print $file; my $newMusicFileName = substr($file, 0, -4); ##Remove ogg extension $newMusicFileName = "$newMusicFileName"."mp3"; # give mp3 extension print "$newMusicFileName\n"; # a checkup unless(rename($file, $newMusicFileName)) ##Save as new file {print "Something did not work as supposed to!!!\n"}; last; ## Breaking out of Loop } } }
exit 0;
Men min rename går galt!! Jeg har ikke lige nogen ide om hvorfor. Kan det skyldes skrive/læse rettigheder? Jeg kører scriptet som ejer af bibliotekerne (og filerne!) og bare for en sikkerheds skyld har jeg også haft chmod 777 alle filerne. Det virker bare stadigvæk ikke! Nogen ideer?
Det var pga. der var en newline (eller noget andet?) gemt i slutningen af det oprindelige filnavn:
use FileHandle; use strict; #use warnings; my $filename ="/tmp/test"; my $line; my $fh = new FileHandle("< $filename"); my $path; while (<$fh>) { $line = $_; if ($line =~ /lykke/i) { chomp($line); $path=$line; $path = substr($path, 0, - 1); $path = "$path"."/"; ##Make it a valid unit path to the current director y we're in # print "$path\n"; } my $file = "$path"."$line"; ##Get the absolute path # print $file; my $musicFile = new FileHandle("< $file"); while(<$musicFile>){ my $musicLine = $_; if ($musicLine =~ /LAME3.93/i) { ## If it's a mp3 file # print $file; my $newMusicFileName = substr($file, 0, -4); ##Remove ogg extension $newMusicFileName = "$newMusicFileName"."mp3"; # give mp3 extension print "$newMusicFileName\n"; # a checkup $file = substr($file, 0, - 1); # print $file; unless(rename($file, $newMusicFileName)) ##Save as new file {print "Something did not work as supposed to!!!\n"}; last; ## Breaking out of Loop } } }
exit 0;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.