sfdumper è un ottimo programma scritto interamente come script shell per il recupero selettivo di file da una immagine (anche raw) di un disco o di una partizione, e fa parte della toolbox per l'analisi forense dei sistemi digitali. Durante il suo utilizzo ho notato che, nel caso di iterazioni ripetute sulla stessa immagine, i file eliminati non sono relativi al tipo della ricerca in corso, ma contengono l'intera lista dei file già trovati nei passaggi precedenti. Sembra quasi che i file eliminati siano tenuti in una lista in solo append. Per evitare il problema, il seguente semplice script shell lanciato con un solo parametro che è la directory contenitore dei dati recuperati permette di eliminare i file cancellati ed erroneamenti recuperati multiple volte dentro a directory che dovrebbe contenere file di altro tipo.
#!/bin/bash
# controllo parametri
if [ $# -le 0 ]
then
echo "Usage: $0"
exit 1
fi
# si entra nella directory di partenza per il recupero
cd $1
ERASED=0
for d in *
do
# salto tutto cio' che non e' una directory
if [ ! -d "$d" ]
then
echo "Salto la non directory $d"
continue
fi
DIR_NAME="$d"
# salto le directory speciali TMP e report
if [ "$DIR_NAME" == "tmp" -o "$DIR_NAME" == "report" ]
then
echo "Salto le directory speciali ($DIR_NAME)"
continue
fi
FILE_TYPE=`echo $DIR_NAME | awk -F '_' '{print $2;}' `
echo "Entro in $DIR_NAME per eliminare i file che non sono $FILE_TYPE"
cd "$DIR_NAME"
for d2 in *
do
if [ -d "$d2" ]
then
cd $d2
for f in *
do
if [ -f $f ]
then
case $f in
*${FILE_TYPE}) ;;
*) echo "Cancellazione di $f da $DIR_NAME"
rm $f
ERASED=$(( ERASED + 1 ))
;;
esac
fi
done
cd ..
fi
done
cd ..
done
echo "File eliminati $ERASED"