… o un diff (basta aspettare altri 3 giorni :eeek:).
Ma, se hai 6 giorni di tempo :D, e se può servire:
#!/bin/bash
#controllo esistenza due parametri
if "$1" == "" ] || "$2" == "" ]; then
echo "Uso: $0 nome_dir_per_sha1sum nome_file_output";
exit 1;
fi;
#DIR è il primo parametro
DIR=$1;
#sostituisco eventuali // con /
while "${DIR//\/\//\/}" != "$DIR" ];
do
DIR=${DIR//\/\//\/}
done;
#rimuovo inizio se path relativo
if "$DIR" == "." ]; then
DIR="";
elif "${DIR:0:2}" == "./" ]; then
DIR=${DIR:2}
fi
#rendo path assoluto
if "${DIR:0:1}" != "/" ]; then
DIR="`pwd`/$DIR"
fi;
#aggiungo / finale, se necessario
if "${DIR:${#DIR}-1:1}" != "/" ]; then
DIR="$DIR/";
fi;
#controllo l'esistenza della cartella $DIR
if ! -d "$DIR" ]; then
echo "$DIR non esiste o non è una cartella";
exit 1;
fi;
if `expr index "$2" /` != "0" ]; then
echo "$2 deve essere il nome del file, non può contenere il carattere /";
exit 1;
fi;
#il secondo parametro è il nome del file
OUTPUT="$DIR$2"
#se il file esiste già, esco in errore (non vorrei cancellare per sbaglio dati importanti...)
if -e "$OUTPUT" ]; then
echo "Il file $OUTPUT esiste";
exit 1;
fi;
echo "sha1sum files contenuti in $DIR";
echo "#$DIR" >"$OUTPUT";
DIR1="$DIR";
#cerco sottocartelle in $DIR, ordino e attribuisco a SUBDIR, uno alla volta, i nomi
find "$DIR" -type d | sort | while read SUBDIR
do
echo "$SUBDIR";
#cerco files in $SUBDIR (escludendo vuoti e contenuti in sottocartelle), ordino e attribuisco a FILE, uno alla volta, i nomi
find "$SUBDIR" -maxdepth 1 -type f -size +0b | sort | while read FILE
do
if "$FILE" != "$OUTPUT" ]; then
#calcolo sha1sum di $FILE
SHA1SUM=`sha1sum "$FILE"`;
#se sha1sum esce in errore, qualcosa è andato storto; esco in errore
if "$?" != "0" ]; then
echo "Errore nell'esecuzione di sha1sum $FILE" >>"$OUTPUT";
exit 1;
fi;
#rimuovo directory base da output di sha1sum e aggiungo al file di output
echo "${SHA1SUM/$DIR1/}" >>"$OUTPUT";
fi;
done;
done;
Salva come sha1sumdir, rendi eseguibile, ed esegui:
$ sha1sumdir nome_dir_per_sha1sum nome_file_output
Crea l’elenco dello sha1sum di tutti i file contenuti in una cartella. Se lo ripeti in entrambi i path, dopo puoi controllare i rispettivi files di output per controllare se coincidono (e, in caso contrario, quali differiscono).
N.B. Rilasciato sotto GPL :)…