Findrepe
# Findrepe

findrepe es un programa para escanear directorios en busca de ficheros duplicados, con opciones para listarlos y borrarlos. Primero compara los tamaños de los ficheros y posteriormente las firmas MD5 y SHA1 (ambos a la vez con el fin de evitar colisiones que de falsos positivos), no se realiza verificación byte-a-byte.

findrepe está escrito en Java y liberado bajo la licencia GPLv3.

## Historia

La primera versión de findrepe fue creada en C/C++ y publicada el 5 de julio de 2004, su única opción era '-d', fue abandonada desde entonces y lo único que perdura es la idéa de comparar tamaños y firmas MD5. Solo existió para windows y funciona correctamente en GNU/Linux+Wine. Se publicó sin licencia, como programa privado (no confundir con privativo). Fue desarrollado con C++Builder sobre windows.

La revisión actual de findrepe fue creada en Java y su primera versión se publicó el 15 de marzo de 2009. Su desarrollo se realiza con Netbeans sobre GNU/Linux (ubuntu 9.10) y su funcionamiento verificado sobre OpenSolaris, Windows XP y Windows 7 y Mac OS X.

## Objetivos

El objetivo de findrepe es encontrar rápidamente archivos duplicados y está optimizado para usar la opción de borrado, creando los primeros resultados lo más pronto posible para seguir trabajando en segundo plano mientras el usuario decide si borrar alguno de los duplicados. Otro de los objetivos es la "suavidad", es decir, no bloquear el resto de programas que se ejecutan en la máquina, a fin de permitir al usuario trabajar mientras se genera algún resultado.

## Internacionalización

A pesar de que el autor del programa es Español, actualmente solo existe versión en inglés, aunque está prevista su internacionalización en próximas versiones.

## Opciones

modo parlanchín, aumenta el número de mensajes que se muestran indicando lo que se está haciendo, un nivel por cada uso (ej: -vvv)

muestra fecha, hora y la pila de llamadas en los mensajes como un logger de java cualquiera.

muestra la licencia que actualmente es GPLv3 o superior

permite borrar los resultados de forma interactiva, siendo conservador en su funcionamiento

Los ficheros son marcados automáticamente para borrar (a falta de confirmación) cuando están dentro de la ruta indicada y existen copias fuera no marcadas. Pueden indicarse rutas que contengan a otras, marcándose entonces aquellos ficheros con más aciertos.

excluye los archivos vacíos de la búsqueda

permite seguir los enlaces simbólicos en la búsqueda.

excluye ficheros que no alcancen un tamaño mínimo

excluye ficheros que superen un tamaño máximo

excluye resultados que no estén malgastando un tamaño mínimo equivalente al tamaño total menos una de las copias.

muestra el tamaño redondeado de cada fichero usando unidades de magnitud para facilitar su lectura.

instala un lanzador usando el comando java

instala un lanzador usando el comando java permitiendo indicar una ruta absoluta

instala un lanzador usando el java permitiendo indicar una ruta absoluta del directorio home de java

instala en sistemas posix no soportados

instala un lanzador añadiendo la versión al nombre lo que permite tener varias versiones instaladas.

muestra solo resultado no duplicados

excluye resultados que no estén duplicados un número exacto de veces

excluye resultados que no estén duplicados un número mínimo de veces

excluye resultados que estén duplicados más de un número máximo de veces

no realiza la autoexclusión de determinadas rutas.

excluye determinadas rutas de la búsqueda

excluye el contenido de los directorios con un nombre determinado

excluye el contenido de los ficheros con un nombre determinado

excluye el contenido de los directorios de control de versiones, conocidos

excluye el contenido de los directorios .svn (subversion)

excluye el contenido de los directorios CVS (cvs)

excluye el contenido de los directorios y ficheros de control de mercurial

indica una ruta de interés, hace que se excluyan resultados en los que al menos una de las copias no está en alguna de las rutas indicadas.

indica un nombre de directorio de interés, hace que se excluyan resultados en los que al menos una de las copias no está contenida en algún nivel en un directorio de los indicados.

indica un nombre de fichero de interés, hace que se excluyan resultados en los que al menos una de las copias no cumple uno de los criterios indicados.

indica un nombre de directorio obligatorio, ignora los ficheros que no están contenidos en algún nivel en un directorio de los indicados.

indica un nombre de fichero obligatorio, ignora los ficheros que no cumplen algún criterio de los indicados.

busca dentro de los ficheros zip y jar de forma recursiva (y se irán añadiendo tgz y otros en futuras versiones).

excluye los ficheros que no se buscarían sin la opción --zip

establece la expresiones regulares (de java) como formato para los patrones

establece los comodines como formato para los patrones, es la opción por defecto

establece el límite de hilos (threads) que pueden realizar la tarea, pueden indicarse entre 0 y 1024. 0 indica que se realice de forma secuencial, esto puede ser un problema cuando el número de ficheros es demasiado grande. Por defecto el número de hilos máximo es calculado según el número de núcleos o procesadores disponibles según la fórmula (N*2+N+N/2).

muestra ficheros con problemas para ser manejados debido a un bug de java al tratar nombres de fichero no-unicode. No afecta a usuarios de Windows.

permite corregir los nombre de ficheros que se muestran con la opción --bug. No afecta (ni funcionará) a usuarios de Windows.

muestra la versión

muestra algunos ejemplos de uso

muestra la ayuda

## Programas similares

Otros programas que pueden encontrar duplicados y funciona bajo *nix:

* fdupes fdupes
* duff
* dupmerge - funciona en varias plataformas (Win32/64 with Cygwin, *nix, Linux etc.)
* fdf - Basado en Perl/c y funciona en la mayoría de plataformas (Win32, *nix y probablemente otras). Usa MD5, SHA1 y otros algoritmos de suma de control.
* freedup - POSIX C compliant y funciona en varias plataformas (Windows with Cygwin, Linux, AIX, etc)
* freedups - perl script
* fslint - tiene interfaz de línea de comandos y GUI.
* liten - Herramienta de línea de comandos de desduplicación en Python puro, y biblioteca, usando sumas de control md5 y un nuevo algoritmo de comparación de bytes. (Linux, Mac OS X, *nix, Windows)
* rdfind
* fdupe - perl script
* ua - Herramienta de línea de comandos Unix/Linux, diseñado para trabajar con find (y similares).
