0% encontró este documento útil (0 votos)
25 vistas4 páginas

FindFilesDuplicated Python

Este script bash analiza una o dos rutas para identificar archivos duplicados mediante el cálculo de su hash MD5. Genera listados temporales con los hashes, tamaños y rutas de los archivos, y luego ejecuta un script de Python que filtra los hashes duplicados para mostrar las rutas correspondientes.

Cargado por

Deric Chan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas4 páginas

FindFilesDuplicated Python

Este script bash analiza una o dos rutas para identificar archivos duplicados mediante el cálculo de su hash MD5. Genera listados temporales con los hashes, tamaños y rutas de los archivos, y luego ejecuta un script de Python que filtra los hashes duplicados para mostrar las rutas correspondientes.

Cargado por

Deric Chan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

#!

/bin/bash

#crear carpeta y ficheros temporales para analisis de MD5 e identificar los


duplicados
mkdir -p /tmp/temporal/

#funciones o metodos del script


rutaUnica(){
echo 'ingrese ruta unica: '
read rutaUnica

find "$rutaUnica" -type f -exec ls -lhpR {} \; | awk '{$1=$2=$3=$4=$6=$7=$8="";


print $0}' > /tmp/temporal/listTamanoPath.txt
sleep 1

#fichero que solo tiene el path de cada archivo para que lo use el script .py
(awk '{$1=""; print $0}' /tmp/temporal/listTamanoPath.txt) >
/tmp/temporal/listPath.txt

#encuentra el md5 de cada fichero


find "$rutaUnica" -type f -exec md5sum {} \; | awk '{print $1}' >
/tmp/temporal/listMD5.txt
sleep 1

#une resultados de ambos ficheros creados con las columnas necesarias


(paste /tmp/temporal/listMD5.txt /tmp/temporal/listTamanoPath.txt | awk '{print
$0}') > /tmp/temporal/listMD5TamanoPath.txt

#muestra los md5 que pertenecen a los ficheros q estan repetidos o duplicados
partiendo de un listado existente
(awk '{print $1}' /tmp/temporal/listMD5.txt | sort | uniq -d >
/tmp/temporal/listMD5-Duplicados.txt)

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

rutaAB(){
echo 'ingrese ruta 1: '
read ruta1
echo 'ingrese ruta 2: '
read ruta2
echo
#encuentra el tamaño de cada fichero y el path de cada fichero
find "$ruta1" -type f -exec ls -lhpR {} \; | awk '{$1=$2=$3=$4=$6=$7=$8=""; print
$0}' > /tmp/temporal/listTamanoPathA.txt
sleep 1

#fichero que solo tiene el path de cada archivo para que lo use el script .py
(awk '{$1=""; print $0}' /tmp/temporal/listTamanoPathA.txt) >
/tmp/temporal/listPathA.txt

#encuentra el md5 de cada fichero


find "$ruta1" -type f -exec md5sum {} \; | awk '{print $1}' >
/tmp/temporal/listMD5A.txt
sleep 1
#une resultados de ambos ficheros creados con las columnas necesarias
(paste /tmp/temporal/listMD5A.txt /tmp/temporal/listTamanoPathA.txt | awk '{print
$0}') > /tmp/temporal/listMD5TamanoPathA.txt

#muestra los md5 que pertenecen a los ficheros q estan repetidos o duplicados
partiendo de un listado existente
#$ awk '{print $1}' fileMD5.txt | sort | uniq -d ;

#similar al anterior, pero muestra el path completo del fichero


#$ awk '{print $1}' fileMD5.txt | sort | uniq -c | while read num dupe; do [[ $num
> 1 ]] && grep -n -- "$dupe" fileMD5.txt; done

#********* PARA RUTA 2

#encuentra el tamaño de cada fichero y el path de cada fichero


find "$ruta2" -type f -exec ls -lhpR {} \; | awk '{$1=$2=$3=$4=$6=$7=$8=""; print
$0}' > /tmp/temporal/listTamanoPathB.txt
sleep 1

#fichero que solo tiene el path de cada archivo para que lo use el script .py
(awk '{$1=""; print $0}' /tmp/temporal/listTamanoPathB.txt) >
/tmp/temporal/listPathB.txt

#encuentra el md5 de cada fichero


find "$ruta2" -type f -exec md5sum {} \; | awk '{print $1}' >
/tmp/temporal/listMD5B.txt
sleep 1

#une resultados de ambos ficheros creados con las columnas necesarias


(paste /tmp/temporal/listMD5B.txt /tmp/temporal/listTamanoPathB.txt | awk '{print
$0}') > /tmp/temporal/listMD5TamanoPathB.txt

#muestra los md5 que pertenecen a los ficheros q estan repetidos o duplicados
partiendo de un listado existente
#$ awk '{print $1}' fileMD5.txt | sort | uniq -d ;

#similar al anterior, pero muestra el path completo del fichero


#$ awk '{print $1}' fileMD5.txt | sort | uniq -c | while read num dupe; do [[ $num
> 1 ]] && grep -n -- "$dupe" fileMD5.txt; done

(cat /tmp/temporal/listPathA.txt /tmp/temporal/listPathB.txt) >


/tmp/temporal/listPathAB.txt

(cat /tmp/temporal/listMD5A.txt /tmp/temporal/listMD5B.txt) >


/tmp/temporal/listMD5AB.txt

(cat /tmp/temporal/listMD5TamanoPathA.txt /tmp/temporal/listMD5TamanoPathB.txt)


> /tmp/temporal/listMD5TamanoPathAB.txt

# extraer listado de MD5 duplicados combinando ambas carpetas A y B

cat /tmp/temporal/listMD5AB.txt | sort | uniq -d > /tmp/temporal/listMD5AB-


Duplicados.txt

cp /tmp/temporal/listMD5AB-Duplicados.txt /tmp/temporal/listMD5-Duplicados.txt
cp /tmp/temporal/listMD5AB.txt /tmp/temporal/listMD5.txt
cp /tmp/temporal/listMD5TamanoPathAB.txt /tmp/temporal/listMD5TamanoPath.txt
}

# metodo para crear script python filtrarMD5Duplicados.py


filtrarMD5Duplicados(){

rm -R /tmp/temporal/filtrarMD5Duplicados.py
echo '#! /usr/bin/env python' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '# -*- coding: utf-8 -*-' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '#Deric 13/08/2019' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'import os' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '#os.system("clear")' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '#este fichero python compara un listado de MD5 contra un listado de MD5
que se encuentran repetidos, y por cada coincidencia verdadera concatena el path de
ese MD5.' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '#luego que genera un listado "PathRepetidos.txt" que es donde se
compara las /rutas/fichero, las lineas que se conserven en el fichero es para su
eliminacion apoyandose con el comando rm -R' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo '# coloca el contenido de un archivo , linea por linea en cada elemento
de array' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile1=open("/tmp/temporal/listMD5-Duplicados.txt","r")' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile2=open("/tmp/temporal/listMD5.txt","r")' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile3=open("/tmp/temporal/listMD5TamanoPath.txt","r")' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo 'ResultadoTemporal=open("/tmp/temporal/ResultadoTemporal.txt","w")'
>> /tmp/temporal/filtrarMD5Duplicados.py
echo 'listMD5Duplicados=pfile1.readlines()' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo 'listMD5=pfile2.readlines()' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'listMD5TamanoPath=pfile3.readlines()' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo '#listRep=pfile2.readlines()' >> /tmp/temporal/filtrarMD5Duplicados.py
echo '#listIndice=pfile4.readlines()' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo 'listIndice=[]' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'for j in listMD5Duplicados:' >> /tmp/temporal/filtrarMD5Duplicados.py
echo ' var=0' >> /tmp/temporal/filtrarMD5Duplicados.py
echo ' for i in listMD5:' >> /tmp/temporal/filtrarMD5Duplicados.py
echo ' if (i == j ):' >> /tmp/temporal/filtrarMD5Duplicados.py
# echo ' print "i es: "+i' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo ' # metodo index para obtener la posicion de un
elemento q exista en un array' >> /tmp/temporal/filtrarMD5Duplicados.py
# echo ' indiceA=listMD5.index(i)' >>
/tmp/temporal/filtrarMD5Duplicados.py
# echo ' print indiceA' >>
/tmp/temporal/filtrarMD5Duplicados.py
echo ' # alimenta a un array de tamano indefinido y
conservando lo que contiene, partiendo de otro array ya existente y accediendo a
algun indice especifico' >> /tmp/temporal/filtrarMD5Duplicados.py
echo ' # almacena lo que contiene un array en proceso de
llenado a un fichero .txt' >> /tmp/temporal/filtrarMD5Duplicados.py
echo ' ResultadoTemporal.write(listMD5TamanoPath[var])'
>> /tmp/temporal/filtrarMD5Duplicados.py
echo ' var=var+1'>> /tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile1.close()' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile2.close()' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'pfile3.close()' >> /tmp/temporal/filtrarMD5Duplicados.py
echo 'ResultadoTemporal.close()' >> /tmp/temporal/filtrarMD5Duplicados.py
chmod +x /tmp/temporal/filtrarMD5Duplicados.py
}

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

#indicar si analizar una o dos rutas


echo '1. para analizar una sola ruta.'
echo '2. para analizar dos rutas.'
read NroRutas
# llamando a metodo para crear script .py
filtrarMD5Duplicados

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

# opcion de elegir ruta unica a analizar


if [ $NroRutas = 1 ];
then
#llamar a metodo
rutaUnica

/tmp/temporal/filtrarMD5Duplicados.py

(awk '{print $0}' /tmp/temporal/ResultadoTemporal.txt | sort | uniq -c | awk


'{$1=""; print $0}' | sort -k2 -r -h) > /tmp/temporal/TotalRepetidos.txt
echo ""
echo "el resultado se almaceno en: /tmp/temporal/TotalRepetidos.txt"
echo ""
cat /tmp/temporal/TotalRepetidos.txt
echo ""
echo ""

echo "listo"

# opcion de elegir dos ruta a analizar, la de origen y la de destino


else
#echo "ruta 2"
rutaAB
/tmp/temporal/filtrarMD5Duplicados.py
(awk '{print $0}' /tmp/temporal/ResultadoTemporal.txt | sort | uniq -c | awk
'{$1=""; print $0}' | sort -k2 -r -h) > /tmp/temporal/TotalRepetidos.txt
echo ""
echo "el resultado se almaceno en: /tmp/temporal/TotalRepetidos.txt"
echo ""
cat /tmp/temporal/TotalRepetidos.txt
fi

#pedir ruta de analisis

También podría gustarte