Búsqueda de sitios web

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


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

¿Qué es fdupes?

Fdupes es una utilidad de Linux escrita por Adrian Lopez en lenguaje de programación C publicado bajo licencia MIT. La aplicación puede encontrar archivos duplicados en un conjunto determinado de directorios y subdirectorios. Fdupes reconoce 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 duros a duplicados.

La comparación comienza en el orden:

Comparación de tamaños > 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 en Debian como Ubuntu y Linux Mint.

sudo apt-get install fdupes

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

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

Nota: El administrador de paquetes predeterminado yum se reemplaza por dnf de Fedora 22 adelante…

¿Cómo utilizar 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 cada archivo contiene 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, llevará algún tiempo escanear 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 subdirectorio encontrado 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 optar por elegir en dos o tres carpetas, según sea necesario. Sin mencionar que puedes 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 utilizar esta opción, de lo contrario podría terminar perdiendo 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 en un rango determinado 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 el resultado de 'fdupes' en un archivo y luego verificar el archivo de texto para decidir qué archivo eliminar. Esto disminuye las posibilidades de que su archivo se elimine accidentalmente. Puedes hacer:

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

Nota: puede reemplazar ‘/home’ con la carpeta que desee. Utilice también 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 enumera 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 omitir 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 utilizar 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 por ahora. Déjame saber cómo encontraste y eliminaste archivos duplicados hasta ahora en Linux. y también dime tu opinión sobre esta utilidad. Coloque sus valiosos comentarios en la sección de comentarios a continuación y no olvide darnos me gusta/compartirlos y ayudarnos a difundirnos.

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