Buscar archivos duplicados en disco

5 marzo 2007

Desde que me compré un disco duro externo de 400Gb, no hago nada más que acumular archivos, películas, ebooks, programas,… retándome a mi mismo a ver cuanto tardo en llenarlo (ya lo tengo al 60% en un par de meses…)
Por eso y porque no le dedico mucha atención a mantenerlo todo organizado, me ocurre que a veces encuentro un mismo fichero en varias carpetas.
Para solucionarlo he pensado en programar algún sistema que me permita ver que fichero tengo repetidos. Me decidí por hacer un script en shell para realizar esta tarea.
La idea es generar un archivo txt que tiene todos los ficheros del disco duro con su tamaño y path. A partir de este obtengo otro fichero donde los ordeno por tamaño y muestro cuantos tengo del mismo tamaño ordenados por tamaño decreciente. Soospecho de aquellos que teniendo un gran tamaño está repetidos.
Al final he llegado a hacer el script de una forma compacta pero creo que he aprendido mucho por el camino por lo que voy a reproducir todo el proceso.
Aviso de que el tema es duro y latoso.

El comando stat permite definir los datos que queremos mostrar de un fichero y el formato en el que lo obtenemos. Detalles en oreilly.
El problema son los espacios que contienen los nombres de los ficheros.
He intentado usando el comando tr traducir las cadenas y reemplazar los espacios para escaparalos (Detalles oreilly y linux journal).

Una solución más sencilla es usar el supercomando find
usando find (detalles oreilly) con la opcion printf.
Podemos procesar la salida con sed (detalles aquí y linux journal y aquí”

Otra opción es crear un script que haga el trabajo:
find /media/sda1 -print | sed 's/ /\\ /g' | sed 's/^/stat -c "%s %N\\n" /g'
¿ventajas? Carga menos a la shell porque no tiene que mantener en memoria un lista tan grande de argumentos, se va procesando línea a linea. Sólo falta darle permiso de ejecución y a volar.
(¿debería de explicar la diferencia entre las comillas ” ,’ y ` ?)

Al final era muuuucho más fácil, sólo tenía que leer completa la ayuda de find:
find . -printf “%s %p\n”
cut -d”|” -f1 ficheros.ordenado.txt | uniq -c -d

4 Responses to “Buscar archivos duplicados en disco”

  1. polux Says:

    Conocias DuMP3? Creo que te va a interesar, y mucho.

    http://ubuntupolux.blogspot.com/2007/08/dump3.html


  2. Sí que parece interesante, le dedicaré un ratito a ver que tal va.

  3. nead Says:

    Seria interesante un script o programa que verifique en varios pasos, se me ocurre algo asi:

    1-Seleccione archivos del mismo tamaño
    2-Compare los nombres de los archivos
    3-Haga un chequeo de hash y los compare
    4-Regrese los resultados o borre automaticamente los archivos duplicados

    Seria interesante integrar el chequeo de hash solo para estar seguros de que los archivos son iguales.


  4. Mi idea final era trabajar con exactamente esos pasos.
    El cálculo del hash es muuuuy costoso (en términos de tiempo) para ficheros grandes.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: