fdupes: una herramienta de línea de comandos para buscar y eliminar archivos duplicados en Linux


Es un requisito común encontrar y reemplazar archivos duplicados para la mayoría de los usuarios de computadoras. Encontrar y eliminar archivos duplicados es un trabajo tedioso que requiere tiempo y paciencia. Encontrar archivos duplicados puede ser muy fácil si su máquina funciona con GNU/Linux, gracias a la utilidad "fdupes".

Fdupes es una utilidad de Linux escrita por Adrian Lopez en lenguaje de programación C lanzada bajo licencia MIT. La aplicación puede encontrar archivos duplicados en el conjunto dado de directorios y subdirectorios. Los Fdupes reconocen los duplicados comparando la firma MD5 de los archivos seguida de una comparación byte a byte. Se pueden pasar muchas opciones con Fdupes para enumerar, eliminar y reemplazar los archivos con enlaces físicos a duplicados.

La comparación comienza en el orden:

comparación de tamaño> Comparación parcial de firmas MD5> Comparación completa de firmas MD5> Comparación byte a byte.

Instalar fdupes en Linux

La instalación de la última versión de fdupes (fdupes versión 1.51) es tan fácil como ejecutar el siguiente comando en sistemas basados u200bu200ben Debian como Ubuntu y Linux Mint.

$ sudo apt-get install fdupes

En los sistemas basados u200bu200ben CentOS/RHEL y Fedora, debe activar el repositorio de epel para instalar el paquete fdupes.

# yum install fdupes
# dnf install fdupes    [On Fedora 22 onwards]

Nota: El administrador de paquetes predeterminado yum es reemplazado por dnf desde Fedora 22 en adelante ...

¿Cómo usar el comando fdupes?

1. Para fines de demostración, creemos algunos archivos duplicados en un directorio (digamos tecmint) simplemente como:

$ mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done

Después de ejecutar el comando anterior, verifiquemos que los archivos duplicados se hayan creado o no usando el comando ls.

$ ls -l

total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

El script anterior crea 15 archivos, a saber, tecmint1.txt, tecmint2.txt ... tecmint15.txt y todos los archivos contienen los mismos datos, es decir,

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2. Ahora busque archivos duplicados dentro de la carpeta tecmint.

$ fdupes /home/$USER/Desktop/tecmint 

/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

3. Busque duplicados de forma recursiva en cada directorio, incluidos sus subdirectorios, utilizando la opción -r.

Busca en todos los archivos y carpetas de forma recursiva, dependiendo de la cantidad de archivos y carpetas, tomará algún tiempo escanear los duplicados. Mientras tanto, se le presentará el progreso total en la terminal, algo como esto.

$ fdupes -r /home

Progress [37780/54747] 69%

4. Vea el tamaño de los duplicados encontrados dentro de una carpeta usando la opción -S.

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

5. Puede ver el tamaño de los archivos duplicados para cada directorio y subdirectorios que se encuentran dentro usando las opciones -S y -r al mismo tiempo, como:

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html

6. Además de buscar en una carpeta o en todas las carpetas de forma recursiva, puede elegir elegir entre dos carpetas o tres carpetas, según sea necesario. Sin mencionar que puede usar la opción -S y/o -r si es necesario.

$ fdupes /home/avi/Desktop/ /home/avi/Templates/

7. Para eliminar los archivos duplicados conservando una copia, puede utilizar la opción "-d". Se debe tener especial cuidado al usar esta opción, de lo contrario, podría terminar perdiendo los archivos/datos necesarios y tenga en cuenta que el proceso es irrecuperable.

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]: 

Puede notar que se enumeran todos los duplicados y se le solicita que los elimine, ya sea uno por uno o cierto rango o todos de una vez. Puede seleccionar un rango similar al siguiente para eliminar archivos de un rango específico.

Set 1 of 1, preserve files [1 - 15, all]: 2-15

   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint11.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint3.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint4.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint6.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint7.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint9.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint10.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint2.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint5.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint14.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint1.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint15.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint12.txt

8. Desde el punto de vista de la seguridad, es posible que desee imprimir la salida de "fdupes" en un archivo y luego verificar el archivo de texto para decidir qué archivo eliminar. Esto reduce las posibilidades de que su archivo se elimine accidentalmente. Puede hacer:

$ fdupes -Sr /home > /home/fdupes.txt

Nota: puede reemplazar "/ home" con la carpeta que desee. También use la opción "-r" y "-S" si desea buscar de forma recursiva y Tamaño de impresión, respectivamente.

9. Puede omitir el primer archivo de cada conjunto de coincidencias utilizando la opción "-f".

Primero Lista los archivos del directorio.

$ ls -l /home/$USER/Desktop/tecmint

total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

y luego omita el primer archivo de cada conjunto de coincidencias.

$ fdupes -f /home/$USER/Desktop/tecmint

/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt

10. Verifique la versión instalada de fdupes.

$ fdupes --version

fdupes 1.51

11. Si necesita ayuda con fdupes, puede usar el interruptor "-h".

$ fdupes -h

Usage: fdupes [options] DIRECTORY...

 -r --recurse     	for every directory given follow subdirectories
                  	encountered within
 -R --recurse:    	for each directory given after this option follow
                  	subdirectories encountered within (note the ':' at
                  	the end of the option, manpage for more details)
 -s --symlinks    	follow symlinks
 -H --hardlinks   	normally, when two or more files point to the same
                  	disk area they are treated as non-duplicates; this
                  	option will change this behavior
 -n --noempty     	exclude zero-length files from consideration
 -A --nohidden    	exclude hidden files from consideration
 -f --omitfirst   	omit the first file in each set of matches
 -1 --sameline    	list each set of matches on a single line
 -S --size        	show size of duplicate files
 -m --summarize   	summarize dupe information
 -q --quiet       	hide progress indicator
 -d --delete      	prompt user for files to preserve and delete all
                  	others; important: under particular circumstances,
                  	data may be lost when using this option together
                  	with -s or --symlinks, or when specifying a
                  	particular directory more than once; refer to the
                  	fdupes documentation for additional information
 -N --noprompt    	together with --delete, preserve the first file in
                  	each set of duplicates and delete the rest without
                  	prompting the user
 -v --version     	display fdupes version
 -h --help        	display this help message

Eso es para todos ahora. Hágame saber cómo estaba encontrando y eliminando archivos duplicados hasta ahora en Linux. y también dime tu opinión sobre esta utilidad. Pon tus valiosos comentarios en la sección de comentarios a continuación y no olvides darnos Me gusta/compartirnos y ayudarnos a difundir.

Estoy trabajando en otra utilidad llamada fslint para eliminar archivos duplicados, pronto se publicarán y a ustedes les encantará leer.