Rinumerare le foto con Linux



Se possedete una fotocamera digitale, sicuramente avrete avuto la necessità di rinominare un insieme grande di foto in maniera automatica, anche perché farlo a mano, al di là degli eventuali errori, si rivelerebbe essere un’operazione lunga e tediosa. Molti software di gestione foto, infatti, permettono questa operazione. Supponiamo per esempio di avere una serie di foto del genere:

DSCN5584.JPG

DSCN5585.JPG

DSCN5586.JPG

DSCN5587.JPG

...

e di volerli rinominare nel seguente modo:

Sardegna_001.jpg

Sardegna_002.jpg

Sardegna_003.jpg

Sardegna_004.jpg

...

Più chiaro per quando le vorremo rivedere. Vediamo come si può fare una cosa del genere con un semplicissimo script Linux. Lo scopo è quello di fare uno scritp che poi chiamaremo con il comando:

$./fotorenumber Sardegna_###.jpg 1

dove con i 3 “###” indichiamo che in quello spazio ci deve essere un numero di 3 cifre (quindi 001, 002, 003 etc.) e il parametro “1” indica che il conteggio deve iniziare da 1. Vediamo il codice e commentiamolo:

#!/bin/bash
ARG=2
if [ $# -ne "$ARG" ]
then
  echo "Usage: `basename $0` <basename (use "#" for number)> <start number>"
  exit $E_ERR_ARG
fi

Queste prime righe di codice servono semplicemente a controllare , in maniera abbastanza blanda, che lo script sia stato invocato nella maniera corretta (viene solo verificato se il numero di parametri è coerente).

#conta i caratteri '#' nel basename
NUMPOUNDS=`echo "$1" | grep -o "#" | wc -l`

Queste righe contano i caratteri “#” nel primo parametro, per sapere di quante cifre deve essere il numero. Come si vede, è stato usato un “grep” che restituisce una riga per ogni “#” trovato, seguito da un “wc” che conta quante righe sono state stampate.

NLEFT=`echo $1 | grep -o "^[^#]*"`
NRIGHT=`echo $1 | grep -o "[^#]*$"`

Queste due righe estraggono rispettivamente la parte all sinistra e alla destra dei “###”, che ci serviranno dopo, perché in mezzo ci andremo a mettere il numero vero e proprio.

COUNTER=$2
for FILENAME in *; do

Dopo aver inizializzato il contatore, cicliamo sui vari file presenti nella cartella (in ordine alfabetico).

  NEWNAME=`printf "${NLEFT}%0${NUMPOUNDS}d${NRIGHT}" "$COUNTER"`

Usiamo il comando printf (si usa proprio coma la printf() del C ) per creare il nuovo nome col numero formattato.

  echo "Renaming $FILENAME into $NEWNAME"
  mv "$FILENAME" "$NEWNAME"
  let COUNTER=$COUNTER+1

Rinominiamo e incrementiamo il contatore.

done

Il gioco è fatto, adesso se volete rinominare una cartella con tante foto, basta che andiate nella cartella e digitiate il comando:

$/home/nomeutente/bin/fotorenumber Sardegna_###.jpg 1
Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest