Shell Skript
Goran Ristic
gee.r at gmx.net
Fre Jan 12 11:42:01 GMT 2007
Tach.
> Hallo,
> ich habe ein kleines immer wieder kehrendes Problem, ich muss (möchte)
> verschiedene Dateien aus einem Verzeichnis ändern / kopieren, das ändern
> oder kopieren kann ich per Terminal und Shell Skript, aber recht
> umständlich. Das könnte bei mir aber so aussehen:
> #!/bin/bash
> cp Datei01.txt /media/usbstick
> cp Datei02.txt /media/usbstick
> usw.
rsync -av /home/jens/Texte /media/usbstic
man rsync
> beim kopieren kann ich Parameter nutzen, so weit alles klar, nur gibt es
> beim Umwandeln von musikdateien im MP3 keine Parameter, Bsp:
> #!/bin/bash
> lame Datei01.wav Datei01.mp3
> lame Datei02.wav Datei02.mp3
> usw.
> Frage:
> Kann ich mit einem Skript ein beliebiges Verzeichnis einlesen (rekursiv
> nicht unbedingt nötig - wünschenswert), die Dateien als Parameter
> übergeben und (vor allem für lame) weiter verarbeiten?
Klar geht auch das.
Aber am einfachsten finde ich da noch immer Perl. Du kannst natürlich
auch python oder sowas benutzen.
Wenns Dir hilft, ein kleines Perlscript, was Dir Deine CDs ausliest,
in MP3 wandelt und vorher noch cddb abfragt:
(Du musst Dir dann noch die Pfade anpassen!)
--cut-here--
use CDDB_get;
$basedir = "~/mp3/";
$cdgrabber = "/usr/bin/cdparanoia";
$mp3encoder = "/usr/local/bin/notlame";
my %config;
$config{CDDB_HOST}="cddb.cddb.com";
$config{CDDB_PORT}=888;
$config{CD_DEVICE}="/dev/hdb";
$config{input}=1;
my %cd=get_cddb(\%config);
unless(defined $cd{title}) {
no_entry();
}
print "artist: $cd{artist}\n";
print "title: $cd{title}\n";
print "category: $cd{cat}\n";
print "cddbid: $cd{id}\n";
print "trackno: $cd{tno}\n";
print "\nTracknames:\n";
foreach my $i ( @{$cd{track}} ) {
print ("$i\n");
}
print "Encode CD now? (y/n) ";
my $dummy = <STDIN>;
chop($dummy);
if (uc($dummy) ne "Y") {die("Hmmm... changed your mind eh?");}
$dir=$basedir.'/'.$cd{artist}.' - '.$cd{title};
print "$dir\n";
system ('mkdir',$dir);
my $n=1;
foreach my $i ( @{$cd{track}} ) {
print "Proceeding track number $n with name $i\n";
if($n<10) { $number='0'.$n; } else { $number=$n; }
$trackname=$i;
$i=~s/\ /\ /g;
$wavname = $dir."/".$number.".wav";
$mp3name = $dir."/".$number." ".$i.".mp3";
system ($cdgrabber, ,"-d$config{CD_DEVICE}", $n, $wavname);
system ($mp3encoder, "-V", "9", "-b","192","--ta", "$cd{artist}", "--tl", "$
cd{title}", "--tt", "$trackname", "--tn" ,$number, $wavname, $mp3name);
system ('rm',$wavname);
$n++;
}
sub no_entry {
print "ok ... no CDDB entry found... give data manually:\n\n";
print ("Give CD-Artist: "); $cd{artist}=<STDIN>;chop ($cd{artist});
print ("Give CD-Title: "); $cd{title}=<STDIN>;chop ($cd{title});
print ("How many Tracks?: "); $cd{tno}=<STDIN>; chop ($cd{tno});
my $count=1;
while ($count <= $cd{tno}) {
print ("Give name of ",$count,". track: ");
my $name=<STDIN>;
chop ($name);
$cd{track}[$count-1]=$name;
$count=$count+1;
}
}
--cut-here--
> Geht das?
> Danke und Grüße
> Jens
--
Mit freundlichen Grüßen
Goran Ristic
mailto:gee.r at gmx.net