xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 da får jeg denne... line 6: [: 242 filelist.txt: integer expression expected Så du fikset det, men forklaring: Det lille scriptet jeg skrev virker. Forutsatt at man a) klarer å kopiere det jeg har skrevet riktig, og b) har alle kommandoene i scriptet, og c) bruker bash. Lenke til kommentar
Velmont Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 da får jeg denne... line 6: [: 242 filelist.txt: integer expression expected Så du fikset det, men forklaring: Det lille scriptet jeg skrev virker. Forutsatt at man a) klarer å kopiere det jeg har skrevet riktig, og b) har alle kommandoene i scriptet, og c) bruker bash. Nei Fordi funket ikke hos meg, jeg fikk samme feil. Jeg hadde også .txt filer da - og mange av filene hadde flere mellomrom ;] Lenke til kommentar
xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) Ok.. My bad tenkte ikke på at wc -l <filnavn> ikke er det samme som cat filnavn | wc -l idiotiske wc som spytter ut filnavn etter tallet.. Men som jeg sa: Det var kun utestet teori. Nå bør den forøvrig virke Endret 28. januar 2004 av xeon Lenke til kommentar
Ganske Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 Ingen som leste rename(1) nei, eg ser de er glade i å gjera ting tungvint La meg demonstrera rename, då: ganske@linux:~/mb/test > ls -1 jkl.test a b c.test def. test gh i.t e s t m n o ganske@linux:~/mb/test > rename -v 's/ /_/g' * jkl.test renamed as ___jkl.test a b c.test renamed as a_b_c.test def. test renamed as def._test gh i.t e s t renamed as gh_i.t_e_s_t m n o renamed as m_n_o ganske@linux:~/mb/test > ls -1 ___jkl.test a_b_c.test def._test gh_i.t_e_s_t m_n_o ganske@linux:~/mb/test > rename finst på så godt som alle maskiner med Perl, dvs. så godt som overalt Lenke til kommentar
Ganske Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 Rekursivt er det forresten litt vanskelegare. Det kan t.d. gjerast på denne måten, med find: ganske@linux:~/mb/test > find . -type f -and -name '*' | rename -v 's/ /_/g' reading filenames from STDIN ./test2/gh i.t e s t renamed as ./test2/gh_i.t_e_s_t ./test2/m n o renamed as ./test2/m_n_o ./test2/ jkl.test renamed as ./test2/___jkl.test ./test2/def. test renamed as ./test2/def._test ./test2/a b c.test renamed as ./test2/a_b_c.test ./gh i.t e s t renamed as ./gh_i.t_e_s_t ./m n o renamed as ./m_n_o ./a b c.test renamed as ./a_b_c.test ./ jkl.test renamed as ./___jkl.test ./def. test renamed as ./def._test ganske@linux:~/mb/test > Alltid kjekt når nokon andre har funne opp hjulet først Lenke til kommentar
greigster Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 Et perl-script som fixer biffen på både linux og hp: fixer følgende tegn " ","&","\\(","\\)","'","''". hvem trenger vel innebygde kommandoer? det er så kjedeligt.. #!/usr/bin/perl # # Usage: "./script directory_you_want_to_check" # &list_files; sub list_files { my $checkdir = shift @ARGV; @cmd =`find $checkdir -type d `; foreach (@cmd) { &rename_file($_); } @cmd =`find $checkdir -type f `; foreach (@cmd) { &rename_file($_); } } sub rename_file { my @filthy_characters = (" ","&","\\(","\\)","'","''"); my $newname = my $oldname = shift; foreach my $character (@filthy_characters){ $oldname=~ s/$character/\\$character/g; chomp ($oldname); } $oldname =~ s/\\\\/\\/g; $newname =~ s/\&/_and_/g; foreach my $character (@filthy_characters){ $newname=~ s/$character/\_/g; chomp ($newname); } if ($oldname ne $newname ) { system("mv $oldname $newname"); } } Lenke til kommentar
Ganske Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 Et perl-script som fixer biffen på både linux og hp:fixer følgende tegn " ","&","\\(","\\)","'","''". hvem trenger vel innebygde kommandoer? det er så kjedeligt.. Det har jo ein viss læringsverdi, men skriptet ditt er meir komplisert og mindre fleksibelt og robust enn /usr/bin/rename. Lenke til kommentar
magikern Skrevet 29. januar 2004 Forfatter Del Skrevet 29. januar 2004 (endret) gøy å se at så mange hadde en interresse for dette , men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe... trur jeg skal skaffe meg litt manualer innen denne form for programmering... Endret 29. januar 2004 av magikern Lenke til kommentar
iDude Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 Hmm,naaaj. "sed" kjører ikke regex ibrotha Du skriver det på en mer bash måte.. Og dessuten /g'en tror jeg heller ikke trengs - det er sånnt du gjør i "vi" - trodde ikke det skulle være nødvendig her.. Til å begynne med var jeg enig med deg, men kverulanten i meg måtte teste det ut.... echo "ja ja ja" | sed "s/[ ]//" jaja ja echo "ja ja ja" | sed "s/[ ]//g" jajaja Lenke til kommentar
A_N_K Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 Sed er da en variant av ed, som igjen vi bygger på (eller 'ex')? I "kolon"-modus i vi skriver man ex-kommandoer, hvis jeg ikke tar fullstendig feil (ex er hos meg symlink til vim). Lenke til kommentar
Ganske Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe... Nemnte eg at rename er fleksibelt? ganske@linux:~/mb/test > rename -v 's/([a-z])/\u$1/g' * ___jkl.test renamed as ___JKL.TEST a_b_c.test renamed as A_B_C.TEST def._test renamed as DEF._TEST gh_i.t_e_s_t renamed as GH_I.T_E_S_T m_n_o renamed as M_N_O test2 renamed as TEST2 Med 'man perlre' lærer du mykje rart om kva eit Perl-regexp kan brukast til. Lenke til kommentar
Torbjørn Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 når man først er i gang med perl, hvorfor ikke løse det med en blærete one-liner perl -e '($a=$_)=~s/ /_/g && rename $_,$a for glob "*"' Lenke til kommentar
magikern Skrevet 29. januar 2004 Forfatter Del Skrevet 29. januar 2004 men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe... Nemnte eg at rename er fleksibelt? ganske@linux:~/mb/test > rename -v 's/([a-z])/\u$1/g' * ___jkl.test renamed as ___JKL.TEST a_b_c.test renamed as A_B_C.TEST def._test renamed as DEF._TEST gh_i.t_e_s_t renamed as GH_I.T_E_S_T m_n_o renamed as M_N_O test2 renamed as TEST2 Med 'man perlre' lærer du mykje rart om kva eit Perl-regexp kan brukast til. får "is a directory" feilmld... forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på... Lenke til kommentar
Torbjørn Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 (endret) perl -e '!-d $_ && ($a=$_)=~s/([A-Z])/lc $1/eg && rename $_,$a for glob "*"' for små bokstaver unntatt directories, hvis det var et problem. Endret 29. januar 2004 av Torbjørn Lenke til kommentar
Ganske Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 får "is a directory"feilmld... forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på... "Left as an exercise to the reader", er det ikkje det det heiter når du har gjort ein glipp? OK, prøv med "\l" (l for lower) i staden for "\u" (u for upper). Feilmeldinga er ikkje mogleg å tyda utan å sjå kva for kommando du har brukt. Lenke til kommentar
magikern Skrevet 29. januar 2004 Forfatter Del Skrevet 29. januar 2004 får "is a directory"feilmld... forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på... "Left as an exercise to the reader", er det ikkje det det heiter når du har gjort ein glipp? OK, prøv med "\l" (l for lower) i staden for "\u" (u for upper). Feilmeldinga er ikkje mogleg å tyda utan å sjå kva for kommando du har brukt. prøvde med: /pub > rename -v 's/([a-z])/\l$1/g'* Lenke til kommentar
Ganske Skrevet 29. januar 2004 Del Skrevet 29. januar 2004 /pub > rename -v 's/([a-z])/\l$1/g'* Mellomrom før stjerna. Og så må du ha [A-Z] i staden for [a-z], det ser eg no at eg gløymde Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå