Sida 1 av 1

Scripta ett massomdop av filer

Postat: 06 apr 2008, 16:26
av Niklas Bolmdahl
Jag försöker döpa om lite filer, och visst, vid det här laget har jag spenderat mer tid på en automatisk lösning än vad det skulle tagit mig att göra't manuellt, men jag vill lära mig.
Kodsnutten här nedanför fick jag ifrån en gammal tråd tråd där jag fick hjälp med ett liknande problem. Problemet är ju bara att den inte funkar för mig.

Ursprunglig kodsnutt från tråden:

Kod: Markera allt

#!/bin/bash
#

for (( i=1 ; i<=20 ; i++ ))
do
  if [ $i -le 9 ]
  then
  `mv 01-0$i 01-0$i.jpg`
  else
  `mv 01-$i 01-$i.jpg`
  fi
done
Mitt försök att modda koden efter vad jag behövde:

Kod: Markera allt

#!/bin/bash
#

for (( i=0 ; i<=21 ; i++ ))
do
  if [ $i -le 9 ]
  then
  `mv gm_tt0$i.gm;1 gm_tt0$i.gm`
  else
  `mv gm_tt$i.gm;1 gm_tt$i.gm`
  fi
done
Filerna som jag försöker döpa om heter "gm_tt00.gm;1" och är numrerade från 00 till 21. Jag vill helt enkelt hugga av ";1" från dem.
Så... vad har jag gjort fel?

om jag fick gissa själv, så skulle jag säga att semikolonet behöver escaperas, men har ingen aning om vad jag ska använda för escape-sekvens.

Re: Scripta ett massomdop av filer

Postat: 06 apr 2008, 16:42
av KiviE
Ja du har helt rätt att ; ställer till det.

Kod: Markera allt

#!/bin/bash

for (( i=0 ; i<=21 ; i++ ))
do
  if [ $i -le 9 ]
  then
    `mv "gm_tt0$i.gm;1" gm_tt0$i.gm`
  else
    `mv "gm_tt$i.gm;1" gm_tt$i.gm`
  fi
done

Re: Scripta ett massomdop av filer

Postat: 06 apr 2008, 16:44
av Lars
Du kan använda backslash eller citattecken, d.v.s. \; eller ";". Här är en alternativ lösning på en rad:

Kod: Markera allt

for fil in *.gm\;1; do mv $fil ${fil/;1/}; done
Konstruktionen ${variabel/sökterm/ersättning} är ofta användbar när man döper om filer.

Re: Scripta ett massomdop av filer

Postat: 06 apr 2008, 19:15
av Daniel Nylander
Prova annars gprename

Re: Scripta ett massomdop av filer

Postat: 06 apr 2008, 19:21
av Niklas Bolmdahl
nice. tack för hjälpen :)