Avatar billede yonzie Nybegynder
17. oktober 2000 - 18:04 Der er 10 kommentarer og
1 løsning

Program/script til rename

Jeg har brug for et program/script/whatever til at rename en bunke filer, skal køre under Windows eller Linux (helst Linux), og skal virke noget i retningen af:

programnavn -r \"(\"  (fjerner parentes)
programnavn -c \"(\" > \")\" ændrer parentes til anden parentes)

Jeg kunne forestille mig at det kunne gøres med et simpelt script, men har ikke den fornødne viden... Det er ikke et krav at det virker som ovenstående, bare at det kan det jeg illustrerer... **på alle filer i en directory på éen gang**
Avatar billede kimsom Nybegynder
17. oktober 2000 - 18:20 #1
Du skal nog cut\'n\'paste for at få plingerne rigtigt

***** PROGRAM FJERN PARANTES *****
for FILE in *\\(*
do
  NEW=`echo $FILE | tr -d \'(\'`
  echo Renaming $FILE to $NEW
  mv $FILE $NEW
done


***** PROGRAM ÆNDRE PARANTES *****
for FILE in *\\(*
do
  NEW=`echo $FILE | tr \'(\' \')\'`
  echo Renaming $FILE to $NEW
  mv $FILE $NEW
done
Avatar billede yonzie Nybegynder
17. oktober 2000 - 18:31 #2
øh... og det putter jeg bare ind i en fil og chmod +x ???
Avatar billede kimsom Nybegynder
17. oktober 2000 - 18:44 #3
exactly ... her er en omskrevet version - der er dog lidt knas hvis den ikke finder
nogle filer ....

for FILE in *\\(*
do
  echo $FILE
  case $1 in
    \'-r\') NEW=`echo $FILE | tr -d \'(\'`
          echo Renaming $FILE to $NEW
          mv $FILE $NEW;;
    \'-c\') NEW=`echo $FILE | tr \'(\' \')\'`
          echo Renaming $FILE to $NEW
          mv $FILE $NEW;;
      *) echo \"Usage: paran -[r|c]\";;
  esac
done
Avatar billede yonzie Nybegynder
17. oktober 2000 - 19:02 #4
skal der ikke også noget
#! /blah/sh
i starten?!? (jeg er newbie)
Avatar billede kimsom Nybegynder
17. oktober 2000 - 19:07 #5
Du kan da godt sætte
#!/bin/sh
hvis du vi tvinge den til at køre i almindelig shell
det er nok smart hvis du som standard bruger csh
ellers burde det være lige meget.
Avatar billede yonzie Nybegynder
17. oktober 2000 - 20:17 #6
ok, det virkede ikke fordi jeg her sidder på en windows-PC, og smed det i en tekstfil m. notepad... men nu har jeg fået det til at virke, med lidt modifikation(mv \"$FILE\" \"$NEW\"), der er bare to problemer:

Den grimme:
den ændrer kun filen hvis parantesen er forrest i filnavnet, og ikke inde midt i, det var det planen var...
filnavn: (fil navn) mere fil navn

den ik\'så grimme:
det var meningen at man skulle kunne skrive i prompten hvad den skulle slette/ændre
Avatar billede yonzie Nybegynder
17. oktober 2000 - 20:22 #7
Den sidste fejl gør ikke rigtig noget... men jeg vil godt give 200 point hvis det også virker...
Avatar billede kimsom Nybegynder
17. oktober 2000 - 20:28 #8
OK.... så prøv denne :

#!/bin/sh
case $1 in
  \'-r\') if [ $# != 2 ]
        then
          echo \"Usage: paran -r <rm chr>\"
          exit
        fi;;
  \'-c\') if [ $# != 3 ]
        then
          echo \"Usage: paran -c <from chr> <to chr>\"
          exit
        fi;;
    *) echo \"Usage: paran -[r|c] <chr1> <chr2>\"
        exit;;
esac
for FILE in *$2*
do
  case $1 in
    \'-r\') NEW=`echo $FILE | tr -d $2`
          echo Renaming $FILE to $NEW
          mv $FILE $NEW;;
    \'-c\') NEW=`echo $FILE | tr $2 $3`
          echo Renaming $FILE to $NEW
          mv $FILE $NEW;;
  esac
done
Avatar billede kimsom Nybegynder
18. oktober 2000 - 18:21 #9
Kunne det bruges ??
Avatar billede yonzie Nybegynder
30. oktober 2000 - 15:37 #10
Undskyld forsinkelsen...

Ja, det er lækkert! Det undrer mig bare at jeg er nødt til at skrive \"./blah.sh\" og ikke bare kan skrive \"blah.sh\"... men det er jo ikke din skyld...

Jeg savner lidt at det kan klare mellemrum også, men det kan tr vel ikke... eller?
Avatar billede kimsom Nybegynder
30. oktober 2000 - 16:05 #11
Du skal finde ud af hvor din PATH bliver sat (/etc/profile eller lign.). I den skal du tilføje
.  (punktum) som sti eks.

PATH=$PATH:.:/usr/local/bin

Med hensyn til tr såhhh .... kan du generelt ikke have spaces i filnavne
men hvis du absolut vi skal du ændre $1 $2 $3 til \'$1\' \'$2\' \'$3\' - altså
sætte plinger om alle dine $123. Så kan du angive space som \" \" samt
du kan angive arrays  som :

parantes -c abc  xyz

a->x  b->y  c->z

parantes \' \' \'X\'

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