Crea y revisa md5sum desde Nautilus

+1
+1
-1

Como Comente en un post anterior.
en el presente Script lo que he hecho es tomar las ideas de alguien y hacer crecer la idea
por lo que dejo los autores y sitios en que encontre las bases para tener el resultado siguiente:

La funcion del presente Script-Bash es realizar archivos md5 para los archivos que tengamos ya sea de uno o de todos los que seleccionemos, al mismo tiempo puede revisar si la suma md5 es coherente al archivo del cual se obtuvo.

Ambas tareas pueden realizarce simultaneamente y al final muestra un resultado practico
en el presente se agregaron checklist (no se como seria en español o no se como expresarlo) para fallas como por ejemplo:
1- no coincide el md5sum
2- no existe el archivo del cual depende el archivo md5sum

Ademas se agrego lista de tareas realizadas
Ejemplo:
1- Numero de Nuevos archivos md5 creados
2- Numero de Archivos que no coincide la suma md5
3- Numero de Archivos que no se encontraron segun el archivo md5
4- Numero de sumas md5 coincidentes

Espero sea de utilidad, a mi me sirve para generar md5 en archivos que envio por e-mail, de manera que si los modifican y dicen que yo los envie asi tengo algo con que respaldarme (aunque sea un poco)

Se utilizó en ubuntu 11.10 y 12.04 funcionando en óptimas condiciones.

Nota:
Sitios en que en contre el material
http://www.ubuntu-es.org/node/20940
http://www.archivoslog.es/2010/09/descomponer-una-ruta-en-directorios-no...

En una terminal
~$ gedit ~/.gnome2/nautilus-scripts/Run\ MD5

Pega el siguiente codigo en el archivo

#!/bin/bash

# AUTHOR: (c) Julio Cesar Cruz (jc852654@gmail.com)
# VERSION: 1.0
# LICENSE: GPL (http://www.gnu.org/licenses/gpl.html)
# NAME: Make md5 to Nautilus

# Revisa que el usuario no tenga seleccionado un directorio (carpeta o folder)
# Foco by File

for Foco in "$@"
do
if [ -d "$Foco" ]; then
zenity --error --text="<'$Foco'> Este Script no trabaja directorios."
exit
fi
done

echo "CHECK LIST" > /tmp/checktext.txt

NewCheckSumFile=0
ListCheckSumFile=0

for File in "$@"
do
let a=a+1
# Revisa si el archivo seleccionado es un md5 para verificarlo
if [[ ${File:(( ${#File} -4 )):4} = ".md5" ]];then
# Check md5 file
(md5sum -c "$File" >> /tmp/checktext.txt) 2>&1 | zenity --progress --title "Check md5" --text "Checking: $File" --pulsate --auto-close
else
# $NombreArchivo para obtener: fullfilename
# $NombreSolo para obtener: filename
# $RutaSola para obtener: locate
# $Extension para obtener: filetype
RutaCompleta=$File
# Comenzamos extrayendo la parte derecha desde el ultimo caracter "/", es decir, el archivo
NombreArchivo="${RutaCompleta##*/}"
# Longitud de la ruta es el total de caracteres menos el largo del nombre de archivo
LargoRuta="${#RutaCompleta} - ${#NombreArchivo}"
# Extraermos la ruta desde el caracter 0 hasta el caracter final de largo de ruta
RutaSola="${RutaCompleta:0:$LargoRuta}"
# Lo siguiente es extraer nombre de archivo
NombreSolo="${NombreArchivo%.[^.]*}"
# Extension se obtiene eliminando del nombre completo el nombre mas el punto
Extension="${NombreArchivo:${#NombreSolo} + 1}"
# Las 2 lineas anteriores fallan si no hay extension por lo que es necesario comprobar que no
# se de el caso de que haya extension pero no nombre ya que en ese caso la ext seria el nombre
if [[ -z "$NombreSolo" && -n "$Extension" ]]; then
NombreSolo=".$Extension"
Extension=""
fi
#Nombre de archivo md5sum a crear
CheckName="$NombreSolo.md5"
#Check md5 file
(md5sum "$NombreArchivo" > "$CheckName") 2>&1
echo "$CheckName New md5sum" >> /tmp/checktext.txt
#zenity --error --text="New md5sum to $CheckName"
let b=b+1
fi
done
zenity --text-info --title "a=$a a y b=$b"
# Display the results!
# Language settings
newmd5="New md5sum"
Passed="La suma coincide"
Failed="La suma no coincide"
Nofile="FALLO"
PrintNew="new md5sum file(s) and"
PrintAllOk="md5 pass!"
PrintFail1="file(s) are OK and"
PrintFail2="file(s) are corrupt and"
PrintFail3="file(s) not found!"
case $LANG in sv* )
newmd5="New md5sum"
Passed="La suma coincide"
Failed="La suma no coincide"
Nofile="FALLO"
PrintNew="new md5sum file(s) and"
PrintAllOk="md5 pass!"
PrintFail1="file(s) are OK and"
PrintFail2="file(s) are corrupt and"
PrintFail3="file(s) not found!"
esac
# Print a little repport about how many failed and how many passed
NumberNew=`cat /tmp/checktext.txt | fgrep -o -e "$newmd5" | wc -l`
NumberOK=`cat /tmp/checktext.txt | fgrep -o -e "$Passed" | wc -l`
NumberFailed=`cat /tmp/checktext.txt | fgrep -o -e "$Failed" | wc -l`
NumberNofile=`cat /tmp/checktext.txt | fgrep -o -e "$Nofile" | wc -l`
StatusMessage="$NumberNew $PrintNew $NumberOK $PrintAllOk $PrintFail1 $NumberFailed $PrintFail2 $NumberNofile $PrintFail3"
echo "-=-=-=-=-=-=-=-=-=-" >> /tmp/checktext.txt
echo "$StatusMessage" >> /tmp/checktext.txt
zenity --text-info --title "$File" --width=800 --height=200 --filename=/tmp/checktext.txt

#-----------------------------------------------------------------------------------------------------------------

Guarda el archivo y sal del Gedit
Archivo/Guardar/Salir

En la terminal

~$ sudo chmod +x ~/.gnome2/nautilus-scripts/Run\ MD5

Solo hace falta realizar las pruebas de rigor respectivas como por ejemplo:
1-Que sea visible en el menú desplegado al realizar un click derecho sobre un archivo en la sección de Scripts
2- Rechazar md5 para Directorios, Carpetas, Folder o como sea que le llames
3- Que genere el archivo correspondiente pero con extencion .md5

Como funciona:
Abre Nautilus y desde cualquier archivo que quieras Crear el Fichero Md5 , haz clic con el botón derecho y dirigete a Scripts/ Run MD5 y lo tendras en la misma ubicacion que el archivo original.

Si lo que deseas es revisar el archivo original junto a su respectivo md5 entonces debes hacer los mismos pasos anteriores con la variante que lo aras en el archivo que contiene el md5.

eso es todo. Espero sea utill