Mera shellscript
Riktigt sugen på ett skript är man ju om man ska göra någonting upprepat många gånger, som när man kommer hem med minneskortet fullt i kameran och vill ha lite käckare namn än dsc_0311.jpg på sina bilder. Vi vill alltså döpa om våra bilder. Ändra namn på allihopa!
Vi har alltså en mapp med bilder:
$ ls
dsc_0310.jpg dsc_0311.jpg dsc_0312.jpg dsc_0313.jpg dsc_0314.jpg
Och hackar i hop någonting i den här stilen. Lugn, jag kommer att försöka förklara hur det funkar.
#!/bin/bash
NUMMER=1
for FIL in $( ls *jpg ); do
mv $FIL $NUMMER.jpg
let NUMMER=$NUMMER+1
done
Gör programmet körbart (chmod, se förra avsnittet) och kör det.
$ chmod a+x rp
$ ./rp
$ ls
1.jpg 2.jpg 3.jpg 4.jpg 5.jpg
Nu ska jag försöka förklara
NUMMER=1 vi kastar in talet ett i en "låda" med etiketten NUMMER, för att se'n kika på innehållet i lådan skriver vi $NUMMER. En sådan "låda" kallas på nördiska en variabel.
for FIL in $( ls *jpg ); do (...) done Vi kör ett ls och för varje jpg-fil som dyker upp ska vi göra allt som står innan done. Filnamnen stoppar vi ett efter ett in i "lådan" FILE.
mv $FIL $NUMMER.jpg Här plockar vi ut innehållet i lådorna. Första varvet i snurran blir det alltså mv dsc_0310.jpg 1.jpg
Uppgifter
Nu är ju 1.jpg osv inte så himla kul filnamn heller...
- Försök göra ett skript som döper bilderna till semester_08_1.jpg, semester_08_2.jpg osv i stället
- Försök förbättra skriptet så att man när man skriver kommandot väljer vad alla bilder ska heta, exempelvis:
rp jul_08 (om vi döper skriptet till rp "rename pix") ger bilderna jul_08_1.jpg, jul_08_2.jpg osv.
Ledtrådar: man bash,
http://www.linuxconfig.org/Bash_scripting_Tutorial#Passing_arguments_to_the_bash_script