Cómo controlar el orden de borrado en fdupes: conservar duplicados por prioridad de directorio

Cómo usar el orden de argumentos de directorio en fdupes para controlar la prioridad de conservación de archivos duplicados, incluyendo escenarios con directorios a, b, c y subdirectorios.

Al usar fdupes para eliminar archivos duplicados entre tres directorios, como a, b y c, si quieres conservar primero a, luego b, y eliminar primero los duplicados de c, la clave no es una regla compleja. Es el orden de los argumentos de directorio.

En modo de borrado no interactivo, fdupes conserva el primer archivo que ve en cada grupo de duplicados y elimina los duplicados posteriores. Por tanto, los argumentos de directorio deben ordenarse de mayor prioridad de conservación a menor.

En otras palabras, para lograr “eliminar primero de c, luego de b, y conservar a tanto como sea posible”, escribe el comando así:

1
fdupes -rdN a b c

El orden de escaneo es a -> b -> c. Cuando el mismo archivo existe en los tres directorios, el archivo de a se encuentra primero y se conserva, mientras que los duplicados de b y c se eliminan. Si solo b y c contienen duplicados, se conserva b y se elimina c.

Significado de los parámetros

Los parámetros comunes son:

  • -r: escanear subdirectorios de forma recursiva.
  • -d: eliminar archivos duplicados.
  • -N: cuando se usa con -d, omitir la confirmación interactiva, conservar el primer archivo de cada grupo de duplicados y eliminar el resto.

Por tanto, el formato básico para eliminación automática de duplicados es:

1
fdupes -rdN 目录A 目录B 目录C

Cuanto antes aparece un directorio, mayor es su prioridad de conservación. Cuanto más tarde aparece, más probable es que sus archivos duplicados sean eliminados.

Previsualizar antes de eliminar

Usar -dN elimina archivos directamente, así que es mejor previsualizar primero los grupos de duplicados:

1
fdupes -r a b c

La salida se agrupa por archivos duplicados. En cada grupo, el archivo mostrado antes es el que más probablemente se conservará en modo de borrado no interactivo.

También puedes ver información de resumen:

1
fdupes -rm a b c

Si los datos son importantes, guarda el resultado e inspecciónalo manualmente:

1
fdupes -r a b c > duplicates.txt

Después de confirmar que el orden dentro de cada grupo de duplicados coincide con lo esperado, ejecuta:

1
fdupes -rdN a b c

Cómo se manejan los subdirectorios

Mientras -r esté activado, fdupes escanea recursivamente todos los archivos bajo los directorios que pasas. La prioridad de conservación sigue determinada por el orden en que las rutas aparecen en el comando.

Por ejemplo:

1
fdupes -rdN dir_a dir_b dir_c

Esto significa:

  • dir_a tiene la prioridad más alta.
  • dir_b viene después.
  • dir_c tiene la prioridad más baja.

Si dir_a/sub1/file.txt y dir_c/sub1/file.txt tienen contenido idéntico, se conserva el archivo bajo dir_a. Si dir_a/x/y/file.txt y dir_c/file.txt tienen contenido idéntico, el archivo bajo dir_a también se conserva primero. fdupes compara contenido de archivos; los nombres y la profundidad de directorio no tienen que coincidir.

Controlar con precisión la prioridad de subdirectorios

Si solo pasas directorios padre, el orden de escaneo dentro de subdirectorios depende del comportamiento de recorrido de fdupes. Esto basta en la mayoría de casos. Pero si quieres que un subdirectorio específico tenga más prioridad, escríbelo explícitamente antes de su directorio padre.

Por ejemplo, supón que quieres conservar primero dir_a, luego dir_b/special, después procesar el resto de dir_b, y finalmente procesar dir_c:

1
fdupes -rdN dir_a dir_b/special dir_b dir_c

Esto hace que dir_b/special se escanee antes que dir_b. Cuando dir_b se escanea después, los archivos bajo special ya han sido registrados, así que ese subdirectorio tiene efectivamente mayor prioridad que el resto de dir_b.

Este patrón es útil cuando:

  • a es el directorio base más importante.
  • Un subdirectorio dentro de b es más importante que el resto de b.
  • c es principalmente un directorio de respaldo de baja prioridad.

El orden de rutas puede extenderse más:

1
fdupes -rdN a b/important b c/keep-first c

La regla sigue siendo la misma: cuanto antes aparece, más probable es que se conserve.

Usar una lista para muchos directorios

Si hay muchos directorios y subdirectorios, escribir manualmente un comando largo es propenso a errores. Puedes escribir las rutas en un archivo de texto como folders.txt, ordenadas por prioridad:

1
2
3
4
5
/path/to/dir_a
/path/to/dir_b/sub_important
/path/to/dir_b
/path/to/dir_c/sub_1
/path/to/dir_c

Luego pásalas a fdupes con xargs:

1
cat folders.txt | xargs fdupes -rdN

Si las rutas pueden contener espacios, usa entrada separada por nulos para mayor seguridad:

1
tr '\n' '\0' < folders.txt | xargs -0 fdupes -rdN

Límites importantes

Primero, fdupes compara contenido de archivos, no nombres. Dos archivos con nombres completamente distintos pueden tratarse como duplicados si su contenido es idéntico.

Segundo, si el directorio a contiene duplicados internamente, fdupes -rdN a b c también puede eliminar duplicados posteriores dentro de a. Este comando significa “conservar el primer archivo según el orden global de escaneo”, no “no eliminar nunca nada bajo a”.

Tercero, por defecto, fdupes no sigue enlaces simbólicos. Si necesitas manejar archivos detrás de symlinks, confirma si necesitas -s y si eso coincide con tus expectativas de seguridad de datos.

Cuarto, fdupes solo elimina archivos duplicados. No limpia directorios vacíos. Después de eliminar, si b y c contienen carpetas vacías, puedes ejecutar:

1
find b c -type d -empty -delete

Hábito de operación más seguro

Si los directorios contienen datos importantes, no empieces con -rdN. Un flujo más seguro es:

  1. Ejecutar primero fdupes -r a b c para ver grupos de duplicados.
  2. Confirmar que el primer archivo de cada grupo es el que quieres conservar.
  3. Luego ejecutar fdupes -rdN a b c para eliminación automática.
  4. Después de eliminar, revisar si hay que limpiar directorios vacíos.

Si te preocupa mucho eliminar archivos bajo a por accidente, primero limpia un rango más pequeño de directorios de baja prioridad, o exporta los resultados y fíltralos manualmente. El orden de directorios en fdupes es útil, pero no es una regla de control de acceso. Una vez que una ruta entra en el escaneo, los archivos duplicados dentro de ella pueden participar en decisiones de eliminación.

Resumen

Para eliminar archivos duplicados con fdupes por prioridad, coloca antes los directorios que quieres conservar y después los directorios de los que quieres eliminar.

Para conservar a, luego b, y eliminar primero de c:

1
fdupes -rdN a b c

Para dar mayor prioridad a un subdirectorio, escríbelo antes de su directorio padre:

1
fdupes -rdN a b/important b c

La frase clave es simple: fdupes -dN conserva los archivos duplicados que aparecen primero y elimina los duplicados que aparecen después. El orden de directorios es tu prioridad de conservación.

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy