domenica 15 maggio 2011

BASH: iterare sui file presenti in una cartella

Può essere molto utile riuscire a scandire i file presenti in una cartella in modo da automatizzare le nostre operazioni, soprattutto quelle che compiamo in modo ripetitivo su molti file.
  for f in directory_name/*
do
echo $f
done

In questo caso semplicemente scandiamo i file presenti nella cartella directory_name e ne stampiamo il nome.
Per comprendere il funzionamento di questo ciclo è importante notare che la parola chiave in è seguita dalla stringa directory_name/* e non dal solo nome della directory: il for di bash non è in grado di guardare direttamente dentro una cartella, in questo caso l'asterisco (come carattere jolly o wildcard) che segue il nome della directory definisce un insieme (l'insieme di di tutti i file presenti nella directory indicata). Il for di Bash, nella forma che sfrutta la parola chiave in, agisce sempre su un insieme.

Io, ad esempio, ho sfruttato questo costrutto per calcolare tutti gli md5sum dei file presenti in una cartella specificata come parametro.
  #!/bin/bash

#md5sum-all.sh

# check if one parameter is passed
if [ ${#} -ne 1 ] ; then
echo -e "[md5sum-all.sh] Usage: ./md5sum-all.sh directory_path\n"
exit 1
fi

# check if the parameter defines a valid directory path
if [ -d ${1} ] ; then
echo -e "Starting md5sum computing..."
else
echo -e "[md5sum-all.sh] Error: ${1} is not a valid path\n"
exit 1
fi

for f in ${1}/*
do
#check if f is a regular file (not directory, not device)
if [ -f $f ] ; then
md5sum $f
fi
done

exit 0

Nessun commento:

Posta un commento