Avatar billede x-periment Nybegynder
18. juni 2003 - 10:15 Der er 8 kommentarer

Søger script

Et hurtigt lille script der kan tage alle filerne i et katalog, og lave det første bogstav i filnavnet om fra stort til lille. ??
Avatar billede janemil Nybegynder
18. juni 2003 - 10:23 #1
Avatar billede janemil Nybegynder
18. juni 2003 - 10:24 #2
Sorry - så ikke det var perl. Trykkede fra forsiden ;-)
Avatar billede x-periment Nybegynder
18. juni 2003 - 10:28 #3
Det er okay skal bare kunne virke under linux
Avatar billede breum Nybegynder
18. juni 2003 - 12:29 #4
$a=`ls`;
@files=split(/\n/,$a);
foreach $file (@files)
{
$file2=lc($file);
unless ($file eq $file2)
{
system "mv $file $file2";
}
}
Avatar billede breum Nybegynder
18. juni 2003 - 12:31 #5
Den gør ikke helt det du beder om, den dør alle bogstaverne til små, men måske er det uden forskel i dit tilfælde?

Ellers må vi lige rette det til

scriptet lægges i det pågældende dir og køres fra kommandolinien med "perl scriptnavn.pl"
Avatar billede breum Nybegynder
18. juni 2003 - 12:41 #6
Denne tager kunn forbogstavet, gør altså præcis hvad du beder om
$a=`ls`;
@files=split(/\n/,$a);
foreach $file (@files)
{
$firstletter=substr($file,0,1);

$lowercasefirstletter=lc($firstletter);

$file2=$file;
$file2 =~ s/$firstletter/$lowercasefirstletter/g;


unless ($file eq $file2)
{
system "mv $file $file2";
}
}
Avatar billede acoon Nybegynder
26. juni 2003 - 15:03 #7
hmm.. Der er nogle ting du ikke har taget højde for.
Feks. vil det script rette alle forekomster i et filnavn... F.eks. vil KanKun.exe blive rename til kankun.exe, hvorimod KanIkke.exe vil blive rename til kanIkke.exe, hvilket var det der blev bedt om.

Og så checker du ikke om der mon skulle være en fil der allerede skulle hedde det.

Du mangler også at escape dine filnavne. Det vil give store problemer hvis der er whitespace i et filnavn...

Nedenstående skulle virke. Må være ærlig at sige jeg ikke har testet det, men det skulle nok gå.



@files=`ls`;
foreach $file (@files) {
  $firstletter = substr($file,0,1);

  $newfile = substr($file,0,1,lc($firstletter));

  unless ($file eq $newfile) {
    system("mv \"$file\" \"$file2\"") unless (-e "$newfile");
  }
}
Avatar billede mfalck Praktikant
24. juli 2003 - 14:58 #8
$newfile = substr($file,0,1,lc($firstletter));

istedet for den længere omskrivning, kan du bruge lcfirst til at sætte det første bogstav til småt.

http://www.perldoc.com/perl5.6/pod/func/lcfirst.html
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