Hace unos días en el grupo de Telegram alguien surgió la pregunta de una herramienta para buscar y eliminar archivos duplicados en Linux. La verdad es que existen varias herramientas para ello, algunas de ellas con interfaz gráfica y otras desde la línea de comandos. Y te puedo asegurar que durante este tiempo he utilizado las más clásicas. Sin embargo, he querido dar un repaso a las opciones que han aparecido recientemente, y por supuesto y como era de esperar, han aparecido nuevas herramientas que pulverizan los registros de las anteriores. Así, en este episodio te traigo tres herramientas y media, dos para terminal y una tercera con interfaz, y te digo lo de media, porque una de ellas también tiene interfaz gráfico.

Buscar y Eliminar Duplicados en Linux de forma RÁPIDA y Efectiva
Un poquito de trasfondo
Actualmente con los precios que tiene el almacenamiento, lo raro es plantearse simplemente la palabra borrar. Sin embargo, a la vez que ha crecido el almacenamiento, también ha crecido el tamaño de los archivos que guardamos… Me refiero a vídeo o imágenes en raw, por citar un claro ejemplo. Estos archivos realmente ocupan mucho espacio, y si además los tenemos duplicados, pues la cosa se complica. Así que, aunque no es algo que se haga habitualmente, de vez en cuando viene bien hacer una limpieza de archivos duplicados.
En este sentido, podía haber recurrido a los clásicos, pero en el mundo Linux, nunca está de mas echar un vistazo al ecosistema de aplicaciones que van apareciendo. Y la verdad es que he encontrado algunas herramientas muy interesantes.
Las tres herramientas y media que he elegido son dos de terminal, una tercera con interfaz gráfico, y la media es porque fclones
también tiene una interfaz gráfica. Las de terminal las elegí porque entiendo que son lo mas normal para realizar búsqueda, pero no tanto para realizar la eliminación de los archivos duplicados. En este sentido, las que tienen interfaz gráfica, son mas amigables para este cometido.
fclones
Tal y como lo describe el propio desarrollador de fclones
, se trata de una herramienta para localizar y borrar duplicados. Esta utilidad para la línea de comandos identifica grupos de archivos idénticos. Pero además tiene toda una serie de opciones que te permite definir con detalle el ámbito de tu búsqueda.
Evidentemente, uno de los objetivos principales es limpiar tu equipo de duplicados, y para esto, fclones
, cuanta con una opción muy interesante que es --dry-run
que te permite conocer los cambios que se realizarán en tu equipo sin aplicar ninguno, lo que seguro te ahorrará mas de un disgusto.
Instalación
En el caso de ArchLinux y derivados, puedes instalar fclones
desde AUR, con lo que la instalación es tan sencilla como ejecutar el siguiente comando,
paru -S fclones
En el caso de otras distribuciones siempre puedes descargar y compilar el código fuente, utilizando este sencillo comando,
cargo install fclones
Una vez instalado lo mejor es que añadas el autocompletado para facilitar su uso. Esto es realmente sencillo y depende de la shell que estés utilizando,
- Bash: Añade
eval "$(fclones complete bash)"
a~/.bashrc
- Zsh: Añade
source <(fclones complete zsh)
a~/.zshrc
- Fish: Añade
fclones complete fish | source
a~/.config/fish/config.fish
básico
No me voy a meter en camisa de once varas, voy a lo realmente sencillo, es decir, buscar duplicados, con alguna que otra opción y la opción de eliminar los duplicados.
fclones ofrece comandos separados para encontrar y eliminar archivos. De esta manera, puedes inspeccionar la lista de archivos encontrados antes de aplicar cualquier modificación al sistema de archivos.
- group – identifica grupos de archivos idénticos y los imprime en la salida estándar.
- remove – elimina archivos redundantes identificados previamente con group.
- link – reemplaza los archivos redundantes con enlaces (por defecto: enlaces duros o hard links).
- dedupe – no elimina ningún archivo, sino que desduplica los datos de los archivos utilizando las capacidades nativas de copia en escritura (copy-on-write, o reflink) del sistema de archivos.
Vamos por partes, empezando por localizar los duplicados. Si lo quieres hacer para el directorio en el que te encuentras, tan solo tienes que ejecutar,
fclones group .
Si quisieras buscar solo los que tienen un tamaño mayor a 10 MB, entonces el comando sería,
fclones group -s 10M .
Por otro lado, si quieres sacar solo los que estén duplicados mas de 5 veces, entonces el comando sería,
fclones group . --rf-over 5
O incluso tienes la opción de filtrar por patrones como en el siguiente ejemplo,
fclones group . --name '*.jpg' '*.png'
Trabajando con duplicados
Una vez identificados los duplicados puedes hacer distintas operaciones con ellos. Puedes desde borrar los duplicados moverlos a otro directorio o reemplazarlos por enlaces simbólicos. Para hacer esto tienes que utilizar el resultado del paso anterior de fclones group
, por ejemplo,
- Reemplazar los duplicados por enlaces:
fclones link <duplicados.txt
- Reemplazar los duplicados por enlaces simbólicos:
fclones link -s <duplicados.txt
- Mover los duplicados a otro directorio enlaces simbólicos:
fclones move target_dir <duplicados.txt
- Eliminar los duplicados:
fclones remove <duplicados.txt
Por supuesto también puedes hacer las operaciones anteriores utilizando direccionamiento con un pipe
, como por ejemplo,
- Reemplazar los duplicados por enlaces:
fclones group . | fclones link
- Reemplazar los duplicados por enlaces simbólicos:
fclones group . | fclones link -s
- Mover los duplicados a otro directorio enlaces simbólicos:
fclones group . | fclones move target_dir
- Eliminar los duplicados:
fclones group . | fclones remove
Aunque yo no te lo recomiendo por la sencilla razón de que no puedes ver lo que vas a eliminar. En este sentido, lo mejor es que utilices la opción --dry-run
para ver lo que va a ocurrir sin que realmente ocurra nada. Por ejemplo,
fclones group . | fclones remove --dry-run
yadf
Como su propio nombre indica yadf
es otro buscador de duplicados (Yet Another Duplicate Finder). Se trata de una herramienta escrita en Rust, que utiliza un enfoque de varios pasos para identificar archivos duplicados. Primero, agrupa los archivos por tamaño, luego calcula hashes para los archivos que tienen el mismo tamaño y finalmente realiza una comparación byte a byte para confirmar que los archivos son idénticos.
Su uso te diría que es mas sencillo que el de fclones
en lo que a la sintaxis se refiere, y para que lo veas te dejo algunos ejemplos de uso,
Aquí tienes la traducción solicitada con el formato de «descripción: `comando`«:
- Encontrar archivos duplicados en el directorio actual:
yadf
- Encontrar archivos duplicados en dos directorios específicos:
yadf ~/Documents ~/Pictures
- Comparar dos archivos:
yadf --depth 0 file1 file2
- Encontrar duplicados en el directorio actual sin descender a subdirectorios:
yadf --depth 1
- Encontrar directorios con una «a» y buscar duplicados en ellos sin descender:
fd --type d a | yadf --depth 1
- Encontrar archivos con una «a» y comprobar si son duplicados:
fd --type f a | yadf
Y lo mismo para filtrar,
- Encontrar archivos duplicados de al menos 100 MB:
yadf --min 100M
- Encontrar archivos duplicados de menos de 100 MB:
yadf --max 100M
- Encontrar archivos JPG duplicados:
yadf --pattern '*.jpg'
- Encontrar duplicados que comiencen por ‘g’:
yadf --regex '^g'
- Encontrar archivos con más de 10 copias:
yadf --rfactor over:10
- Encontrar archivos con menos de 10 copias:
yadf --rfactor under:10
- Encontrar archivos únicos (sin duplicados):
yadf --rfactor equal:1
Indicarte que puedes formatear la salida para utilizarla a posteriori.
Por último, el desarrollador de yadf
también ha hecho sus propios test, y en su caso yadf
es algo mas rápido que fclones
. (No hay como ser el padre de la criatura).
czkawka o krokiet
Este es el primero de los interfaces gráficos que puedes utilizar para buscar y eliminar archivos ducplicados. czkawka
es una aplicación de código abierto y multiplataforma escrita en Rust. Su objetivo principal es proporcionar una forma rápida y eficiente de encontrar y eliminar archivos duplicados, archivos grandes, archivos vacíos, archivos temporales y otros tipos de archivos innecesarios en tu sistema.
Realmente tienes dos opciones que son czkawka
y krokiet
, que utilizan el mismo motor, pero con dos interfaces distintas. La primera utiliza Gtk
, mientras que la segunda utiliza Slint
.
El funcionamiento es muy similar al de fclones
y yadf
en cuanto a la búsqueda se refiere, la gran diferencia radica en el tratamiento de los resultados. En estas dos aplicaciones gráficas, una vez tienes el listado de grupos, el siguiente paso es seleccionar de forma completamente visual, con que archivos quieres trabajar y listo.
Entre los dos interfaces czkawka
es el mas completo, pero krokiet
es mas ligero y rápido. En cualquier caso, ambas aplicaciones son muy buenas y cumplen perfectamente con su cometido.
flcones-gui
Otra interesante opción para realizar la búsqueda y tratamiento de archivos duplicados es utilizar fclones-gui
. Se trata de una interfaz gráfica de fclones
muy sencilla y funcional.
No tienes todas las opciones que te ofrece fclones
, pero si las mas habituales para encontrar esos duplicados y tratarlos. Simplemente tienes que seleccionar el directorio y aquellas opciones que necesites y pulsar el botón de encontrar duplicados. Una vez localizados esos duplicados, el siguiente paso es seleccionar aquellos que quieres tratar y seleccionar lo que quieres hacer con ellos.
Entre krokiet
, czkawka
y fclones-gui
, yo me quedaría con cualquiera de las dos primeras, mas que nada porque me da la impresión que el desarrollo es mas continuado que con el caso de fclones-gui
. Sin embargo, si con lo que te ofrece este último tienes suficiente, pues adelante.
Benchmarks
Los resultados de este benchmark están reproducidos de la página de GitHub de fclones
, pero seguro te serán de utilidad para hacer tus pruebas.
Program | Version | Language | Time | Peak Memory |
---|---|---|---|---|
fclones | 0.12.1 | Rust | 0:34.59 | 266 MB |
yadf | 0.15.2 | Rust | 0:59.32 | 329 MB |
czkawka | 3.1.0 | Rust | 2:09.00 | 1.4 GB |
rmlint | 2.9.0 | C, Python | 2:28.43 | 942 MB |
jdupes | 1.18.2 | C | 5:01.91 | 332 MB |
dupe-krill | 1.4.5 | Rust | 5:09.52 | 706 MB |
fdupes | 2.1.1 | C | 5:46.19 | 342 MB |
rdfind | 1.4.1 | C++ | 5:53.07 | 496 MB |
dupeguru | 4.1.1 | Python | 7:49.89 | 1.4 GB |
fdupes-java | 1.3.1 | Java | > 20 minutes | 4.2 GB |
Conclusión
Después de todo esto, y salvo que tenga muy claro que es lo que tengo que eliminar, casi con toda seguridad me decantaría por alguno de los interfaces gráficos de los que he comentado. Es mas, te diría que me quedo con el de fclones-gui
por su simplicidad, aunque me echa para atrás el detalla de su mantenimiento… En fin, como de costumbre, para gustos los colores.
Más información,