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 
  -v, --verbose               increase verbosity
      --verbose-logger        format messages as a logger
  -L, --license               display software license
  -d, --delete                prompt user for files to delete
      --delete-auto=path      smart auto-selection of files for deletion
  -n, --noempty               exclude zero-length files
  -s, --symlinks              follow symlinks
  -m, --min-size=size         exclude files shorter than size[bkmgt]
  -M, --max-size=size         exclude files larger than size[bkmgt]
  -w  --min-wasted=size       minimun wasted size[bkmgt] copies, size*(n-1)
  -S  --size                  show size[bkmgt] of files
      --install               install a launcher
      --install-java[=path]   install a launcher using 'java' command
      --install-home[=path]   install a launcher using 'java.home' property
      --install-posix         posix flavor for install options when unknown
      --install-version       adds version to launcher name
      --unique                list only unique files (--count=1)
      --count=N               list files repeated N times  
  -c  --min-count=N           files repeated at least N times
  -C  --max-count=N           files repeated no more than N times
      --noautoexclude         don't autoexclude some paths (/dev, /proc, ...)
      --exclude=path          don't follow path
      --exclude-dir=pattern   don't follow directories named name
      --exclude-file=pattern  ignore files named name
      --exclude-rc            ignore revision control directories
      --exclude-svn           ignore subversion (.svn)
      --exclude-cvs           ignore cvs (CVS)
      --exclude-hg            ignore mercurial (.hg and .hgignore)
  -f  --focus=path            focus on files in path
      --focus-dir=pattern     focus on directories matching pattern
      --focus-file=pattern    focus on files matching pattern
      --dir=pattern           only directories matching pattern
      --file=pattern          only files matching pattern
  -z  --zip                   recurse into zip files (zip, jar, ...)(ALPHA)
  -Z  --zip-only              exclude files not added by option --zip
  -e  --regex                 uses java regular expresions
      --wildcard              uses wildcards '*', '?' and '[]' (default)
  -j  --jobs=N                limits thread use to N (0-1024, developers only)
      --bug                   show filenames with bugs
      --bug-fix               try to fix filenames with bugs
      --version               print version number
      --examples              print some useful examples
 (-h) --help                  show this help (-h works with no other options)

  -v, --verbose               increase verbosity

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)

      --verbose-logger        format messages as a logger

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

  -L, --license               display software license

muestra la licencia que actualmente es GPLv3 o superior

  -d, --delete                prompt user for files to delete

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

      --delete-auto=path      smart auto-selection of files for deletion

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.

  -n, --noempty               exclude zero-length files

excluye los archivos vacíos de la búsqueda

  -s, --symlinks              follow symlinks

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

  -m, --min-size=size         exclude files shorter than size[bkmgt]

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

  -M, --max-size=size         exclude files larger than size[bkmgt]

excluye ficheros que superen un tamaño máximo

  -w  --min-wasted=size       minimum wasted size[bkmgt] copies, size*(n-1)

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

  -S  --size                  show size[bkmgt] of files

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

      --install               install a launcher

instala un lanzador usando el comando java

      --install-java[=path]   install a launcher using 'java' command

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

      --install-home[=path]   install a launcher using 'java.home' property

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

      --install-posix         posix flavor for install options when unknown

instala en sistemas posix no soportados

      --install-version       adds version to launcher name

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

      --unique                list only unique files (--count=1)

muestra solo resultado no duplicados

      --count=N               list files repeated N times  

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

  -c  --min-count=N           files repeated at least N times

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

  -C  --max-count=N           files repeated no more than N times

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

      --noautoexclude         don't autoexclude some paths (/dev, /proc, ...)

no realiza la autoexclusión de determinadas rutas.

      --exclude=path          don't follow path

excluye determinadas rutas de la búsqueda

      --exclude-dir=pattern   don't follow directories named name

excluye el contenido de los directorios con un nombre determinado

      --exclude-file=pattern  ignore files named name

excluye el contenido de los ficheros con un nombre determinado

      --exclude-rc            ignore revision control directories

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

      --exclude-svn           ignore subversion (.svn)

excluye el contenido de los directorios .svn (subversion)

      --exclude-cvs           ignore cvs (CVS)

excluye el contenido de los directorios CVS (cvs)

      --exclude-hg            ignore mercurial (.hg and .hgignore)

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

  -f  --focus=path            focus on files in path

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.

      --focus-dir=pattern     focus on directories matching pattern

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.

      --focus-file=pattern    focus on files matching pattern

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.

      --dir=pattern           only directories matching pattern

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

      --file=pattern          only files matching pattern

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

  -z  --zip                   recurse into zip files (zip, jar, ...)(ALPHA)

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

  -Z  --zip-only              exclude files not added by option --zip

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

  -e  --regex                 uses java regular expresions

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

      --wildcard              uses wildcards '*', '?' and '[]' (default)

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

  -j  --jobs=N                limits thread use to N (0-1024, developers only)

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).

      --bug                   show filenames with bugs

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.

      --bug-fix               try to fix filenames with bugs

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

      --version               print version number

muestra la versión

      --examples              print some useful examples

muestra algunos ejemplos de uso

 (-h) --help                 show this help (-h works with no other options)

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).

Enlaces externos 
 wiki de findrepe
 lista de descargas
 
 proyecto del que forma parte findrepe
 página de findrepe en freshmeat

Software para Unix