Scripta ett massomdop av filer

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Niklas Bolmdahl
Inlägg: 343
Blev medlem: 07 jun 2006, 15:46
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Lund
Kontakt:

Scripta ett massomdop av filer

Inlägg 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.
KiviE
Inlägg: 2157
Blev medlem: 25 okt 2007, 14:00
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Luleå

Re: Scripta ett massomdop av filer

Inlägg 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
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Scripta ett massomdop av filer

Inlägg 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.
Användarvisningsbild
Daniel Nylander
Inlägg: 1002
Blev medlem: 21 aug 2006, 14:57
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur
Ort: Stockholm
Kontakt:

Re: Scripta ett massomdop av filer

Inlägg av Daniel Nylander »

Prova annars gprename
Användarvisningsbild
Niklas Bolmdahl
Inlägg: 343
Blev medlem: 07 jun 2006, 15:46
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Lund
Kontakt:

Re: Scripta ett massomdop av filer

Inlägg av Niklas Bolmdahl »

nice. tack för hjälpen :)
Skriv svar

Återgå till "Terminalforum"