Eliminar duplicados en Linux con fdupes

El incremento en la velocidad de tu internet, de unos pocos kbps hasta las velocidades actuales, tienes muchas ventajas. Ha permitido que tengas al alcance de tus manos grandes cantidades de información, en cualquier formato, tanto documentos escritos, como audio como vídeo. Bueno, mas que al alcance de tus manos, en el interior de tus diiscos duros. Pero, evidentemente, esto también tiene un problema, un grave problema, nos estamos convirtiendo en unos Diógenes digitales. Almacenamos grandes cantidades de documentos, y en ocasiones por duplicado. Y justo esto es lo que voy a tratar en este artículo, eliminar duplicados en Linux.

Inicalmente, podrías pensar, que con la velocidad que aumenta el tamaño de los discos, tener porquería digital, tampoco es tan problemático. Sin embargo, tener duplicados en Linux es un problema. No porque sea Linux, si no porque es problemático en cualquier Sistema Operativo, y en la vida en general.

No hace falta ser un genio, para caer en la cuenta que es mas fácil buscar entre 100 documentos que entre 100.000. ¿No te parece?.

Eliminar duplicados en Linux con fdupes

Eliminar duplicados en Linux

Como te decía en la introducción, el objetivo de este artículo, es hablarte de una herramienta que te va a permitir encontrar archivos duplicados en tu equipo.

Para este objetivo, te voy a hablar en concreto sobre fdupes. Una herramienta que se encaraga de encontrar todos los archivos duplicados en Linux. Pero además fdupes te va a permitir borrar los archivos duplicados.

fdupes utiliza md5sums en la búsqueda de duplicados. En el caso de que el resultado sea igual, entonces realiza una comparación byte a byte.

Así, por ejemplo, para encontrar todos los archivos duplicados en un directorio y subdirectorios, es tan sencillo como ejecutar la siguiente instrucción,

fdupes -r ~/home/lorenzo 

Esto en mi directorio, con unos 118.000 archivos se ha llevado unso 30 segundos aproximadamente. No está nada mal, ¿no te parece?.

Opciones de fdupes

fdupes tiene una serie de opciones que te permite afinar el trabajo de esta herramienta. Así, algunas de las opciones que te ofrece esta aplicación son las siguientes,

  • -r ó --recurse realiza la búsqueda de forma recursiva en todos los directorios que le hayas proporcionado.
  • -R ó --recurse: realiza la búsqueda como en el caso anterior, pero solo en los directorios que vayan a continuación de esta opción. Es decir, en el caso de fdupes dir1 --recurse: dir2, buscará solo de forma recursiva en dir2, mientras en dir1 solo realizará la búsqueda en el primer nivel.
  • -s ó --symlinks en este caso sigue los enlaces simbólicos. Para mi, tener esta opción es imprescindible, dado que gran parte de los directorios en /home están enlazados de forma simbólica, tal y como explico en el artículo sobre como tener varios sistemas Linux en un PC
  • -H ó --hardlinks esta opción es equivalente a la opción anterior, pero para el caso de enlaces duros. Recuerda que un enlace duro o enlace físico, es una referencia o puntero a un archivo.
  • -n ó --noempty no tiene en cuenta los archivos de tamaño 0.
  • -f ó --omitfirst omite el primer archivo de un conjunto de coincidencias. Así, si fdupes encuentra una docena de duplicados, por ejemplo, con esta opción no devolvería el primero que haya encontrado.
  • -A ó --nohidden no tienes encuenta los archivos ocultos en la búsqueda.
  • -1 ó --sameline con esta opción te muestra cada conjunto de duplicados en una única línea. Esto te puede venir perfecto para realizar un recuento con wc o bien, para hacer un procesado posterior.
  • -S ó --size muestra el tamaño de los archivos duplicados.
  • -m ó --summarize muestra un resumen de los archivos duplicados cuando termina el proceso de búsqueda de duplicados.
  • -q ó --quiet oculta el indicador de progreso.
  • -d ó --delete pregunta el usuario por los archivos que quiere guardar, borrando el resto de archivos.
  • -N ó --noprompt si la utilizas junto con la opción anterior --delete, preserva el primero de los archivos, borrando el resto de los archivos duplicados, pero esta vez sin preguntarte.
  • -I ó --immediate borra cada duplicado conforme los encuentra. Es decir, esta opción no realiza la agrupación de duplicados. Esta opción no te pregunta.
  • -p ó --permissions si utilizas esta opción, dos archivos iguales pero con diferentes usuarios o grupos o permisos se cosideran como si fueran distintos.
  • -o ó --order=time ó --order=name. Ordena los duplicados en función a la fecha time o en función al nombre, name del archivo respectivamente.
  • -i ó --reverse, tiene la misma consideración que el punto anterior pero lo ordena en forma inversa.
  • v ó `–version, muestra la versión de fdupes.
  • h ó --help, te mostrará la ayuda de esta herramienta.

A la práctica

Una vez ya tienes claras todas las opciones que te ofrece esta herramienta, te invito a que me acompañes a una serie de ejemplos prácticos, para que te hagas una idea del funcionamiento de la aplicación.

Parto de la siguiente estrucutra de archivos y directorios,

.____ejemplo
| |____subdir
| | |____subdirl2
| | |____ejemplo1.txt
| | |____ejemplol1.txt
| |____ejemplol3.txt
| |____ejemplo.txt
| |____ejemplo3.txt
| |____ejemplo1.txt
| |____ejemplo2.txt
| |____ejemplol1.txt
| |____ejemplol2.txt

Si ejecuto fdupes -S ejemplo, el resultado es el siguiente,

25 bytes each:                          
ejemplo/ejemplol1.txt
ejemplo/ejemplol3.txt

20 bytes each:
ejemplo/ejemplo2.txt
ejemplo/ejemplol2.txt

17 bytes each:
ejemplo/ejemplo.txt
ejemplo/ejemplo3.txt
ejemplo/ejemplo1.txt

Si no utilizas la opción -S, el resultado es exactamente el mismo, con la diferencia de que no te muestra el resumen de espacio ocupado por cada conjunto de archivos.

Si tenemos en cuenta la opción de recursividad con fdupes -Sr ejemplo (*Sr de señor), el resultado será,

25 bytes each:                          
ejemplo/ejemplol1.txt
ejemplo/ejemplol3.txt
ejemplo/subdir/ejemplol1.txt

20 bytes each:
ejemplo/ejemplo2.txt
ejemplo/ejemplol2.txt

17 bytes each:
ejemplo/ejemplo.txt
ejemplo/ejemplo3.txt
ejemplo/ejemplo1.txt
ejemplo/subdir/ejemplo1.txt

Si quieres ver los resultados además de mostrarlos en el terminal tendrás que hacer uso de la herramienta tee. Por ejemplo, fdupes -Sr ejemplo | tee resultado.txt.

Si quieres ver cada conjunto en una única línea, la instrucción a ejecutar es fdupes -Sr1, y el resultado quedará de la siguiente forma,

25 bytes each:                          
ejemplo/ejemplol1.txt ejemplo/ejemplol3.txt ejemplo/subdir/ejemplol1.txt 
20 bytes each:
ejemplo/ejemplo2.txt ejemplo/ejemplol2.txt 
17 bytes each:
ejemplo/ejemplo.txt ejemplo/ejemplo3.txt ejemplo/ejemplo1.txt ejemplo/subdir/ejemplo1.txt 

Borrando

Si quieres borrar, tienes la opción de hacerlo, como has visto en las opciones, partiendo de que te pregunte con fdupes -Sr1d ejemplo, lo que te mostrará algo como,

[1] ejemplo/ejemplol1.txt               
[2] ejemplo/ejemplol3.txt
[3] ejemplo/subdir/ejemplol1.txt

Set 1 of 3, preserve files [1 - 3, all] (25 bytes each): 

Como ves te permite seleccionar que archivo quedarte o incluso quedarte con todas. Por supuesto también lo puedes hacer sin preguntar. En este caso, se queda con el primero. Por ejemplo, fdupes -dN ejemplo, te devolverá lo siguiente,

[+] ejemplo/ejemplol1.txt
[-] ejemplo/ejemplol3.txt


[+] ejemplo/ejemplo2.txt
[-] ejemplo/ejemplol2.txt


[+] ejemplo/ejemplo.txt
[-] ejemplo/ejemplo3.txt
[-] ejemplo/ejemplo1.txt

Por supuesto, puedes recurrir a la ordenación para seleccionar el último que has creado para que se quede, en lugar del primero fdupes -o time -idN ejemplo. Esto se traduce en lo siguiente,

[+] ejemplo/ejemplo3.txt
[-] ejemplo/ejemplo5.txt
[-] ejemplo/ejemplo4.txt
[-] ejemplo/ejemplo2.txt

Conclusión

Como has podido ver, se trata de una herramienta extremadamente sencilla de utilizar, y que de una forma muy intuitiva, te va a ayudar a terminar con tu basura digital, o por lo menos a reducir tu basura digital, y eliminar duplicados en Linux.

Por supuesto, esta herramienta es carne de cañón para automatizar procesos. Eso si, es muy recomendable que lo hagas con mucho detenimiento, para solo eliminar duplicados en Linux, y evitar hacer un destrozo en tu sistema de archivos.


Más información,

Imagen de portada de Amir-abbas Abdolali en Unsplash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *