Antecknar lite linux tips

Fick frågan om jag visste något smidigt sett att behålla de 10 första bilderna i en serie och ta bort resten bilderna serien med hjälp av något eller några linux kommando.

För att ha några filer jag kan testa mot så skrev jag ett litet skript 🙂
[bash]#!/bin/bash

i=0
max=10000
while [ "$i" -lt "$max" ]
do
touch "bild$i.jpg"
i=`expr $i + 1`
done
[/bash]

Innan du börjar försöka med dessa kommandon kan du testa med ls först eller använda -i flaggan på rm för att få bekräfta den dina val.

Om man har bildserier som börjar på 0 så kan ta bort de 10 första genom att skriva följande.
[bash]rm bild[0-9].jpg
[/bash]
och om man vill ta bort alla bilder förutom de tio första förutsatt att serien börjar på 0 så kan man skriva så här
[bash]rm bild[0-9]?*.jpg
[/bash]
uttrycket säger ta bort alla filer vars filnamn börjar på ”bild” och innehåller ett tecken efter ”bild” som innehåller en siffra mellan 0-9 frågetecknet säger att det måste finnas ett tecken efter siffran och stjärnan kommer matcha noll eller alla tecken fram till .jpg

Wildcards info hos tldp.org

Något som är värt att nämna är man helst skulle vilja använda bild[0-9]{2,10} som i ett vanligt regexp för verkligen försäkra sig om att det är siffror man jämför mot. men även om skulle göra det så kollar man bara om det är siffror och inte om siffrorna är inom ett visst intervall som tex bild3-bild303.

Om man vill använda find med xargs kan man göra så här
[bash]
find . -name ’bild[0-9]?*.jpg’ -print0 | xargs –null /bin/rm -f
[/bash]

Denna går att förbättra!
[bash]
find . -iregex ’./bild[0-9][0-9]?..[.]jpg’ -print
[/bash]

Jag kommer nog fortsätta på det här inlägget till jag hittat något bra och enkelt sätt att göra det på.