Avatar billede joyride Nybegynder
15. maj 2004 - 14:55 Der 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.

På forhånd tak
Avatar billede joyride Nybegynder
15. maj 2004 - 14:56 #1
Spørgsmålet der førte mig hertil kan ses her (som lidt baggrundsviden):
http://www.eksperten.dk/spm/498383
Avatar billede joyride Nybegynder
15. maj 2004 - 15:50 #2
mp3 filerne har LAME3.93 i headeren...
Avatar billede joyride Nybegynder
15. maj 2004 - 16:20 #3
Jeg er selv kommet så langt:

#!/usr/bin/perl

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"."/";
#      print "$path\n";
    }
  my $file = "$path"."$line";
#  print $file;
  my $musicFile = new FileHandle("< $file");
  while(<$musicFile>){
      my $musicLine = $_;
      if ($musicLine =~ /LAME3.93/i) {
          print $file;
## Omdøb filen til $file.mp3
      }
  }
}

exit 0;


Men jeg ved ikke lige (endnu hvordan jeg laver omdøbningstrinnet
Avatar billede joyride Nybegynder
15. maj 2004 - 17:28 #4
Nu er jeg kommet så langt:

#!/usr/bin/perl

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?
Avatar billede joyride Nybegynder
15. maj 2004 - 17:57 #5
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;
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester