Algunas veces tenemos un directorio lleno de ficheros repetidos con nombres distintos.
Por ejemplo: dentro de un directorio tipo maildir después de algún problema podemos tener un montón de ficheros repetidos con nombres diferentes: el mismo mensaje de e-mail varias veces.
Encontrar ficheros duplicados con diferentes nombres en el mismo directorio usando Bash
Este script muestra solo los ficheros que están mas de una vez y cuantas veces están repetidos:
md5sum *| sort |uniq -w33 -D
Podemos añadir este script en nuestro fichero .bash_aliases file para tenerlo siempre disponible:
alias EncontrarFicherosDuplicados='md5sum *| sort |uniq -w33 -D'
md5sum obtiene la suma de control MD5 (128-bit) de cada fichero, los cual nos sirve para identificar ficheros repetidos. Los ficheros que tengan igual suma de control son iguales aunque tengan el nombre distinto.
El formato tiene 2 columnas: La primera columna tiene 32 caracteres con la suma de control y la segunda columna con el nombre Ejemplo:
a4d29c43765b0840b5713cb2029c79b2 1161600399.10652.uPsdZ:2,S
Con sort agrupamos los ficheros repetidos según su suma de control y con uniq -w33 -D comparamos solo esa suma de control (los 32 caracteres y mostramos por pantalla la tupla suma de control + nombre de fichero de ficheros repetidos
Un resultado tipico podria ser:
1ca439f3907b8552a2391a4214b1da9e 1161600477.10652.vA5ww:2,S
1ca439f3907b8552a2391a4214b1da9e 1161600484.10652.RgsF6:2,S
Esto significa que tenemos 1 fichero repetido 2 veces con la suma de control igual a :
1ca439f3907b8552a2391a4214b1da9e
Y que los ficheros son:
1161600477.10652.vA5ww:2,S
1161600484.10652.RgsF6:2,S
excelente
Me viene como anillo al dedo…. =))
Una pregunta: Como se podria mejorar para que lo haga de forma recursiva?.
Estoy ordenando las fotos y tengo gran parte separada en subcarpetas… esto solo verifica los archivos que estan en el 1er nivel del path.
Saludos
Hola Gonza,
Me alegro de que te fuera bien. Este script lo hice hace mucho tiempo por que me hizo falta para algo. (no recuerdo que) y nunca jamas lo volví a usar.
Para lo que quieres hay ya una herramienta hecha: fdupes – identifies duplicate files within given directories
Aquí la descripción mas completa:
Descripción: identifies duplicate files within given directories
FDupes uses md5sums and then a byte by byte comparison to find duplicate files within a set of directories. It has several
useful options including recursion.
Página principal: http://code.google.com/p/fdupes/
Espero que te sirva!
Ya me diras que tal fue
Salu2
Juan
utilizando el comando find podemos ampliar las opciones, por ejemplo.
find . -maxdepth 1 -type f -exec md5sum {} \; | sort | uniq -w33 -D
–>de esta forma buscamos también los ficheros ocultos
find / -maxdepth 1 -type f -exec md5sum {} \; | sort | uniq -w33 -D
–>de forma recursiva y en todo el disco
Muchas gracias por tu aportación Roque 🙂