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í:
|
|
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:
|
|
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:
|
|
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:
|
|
Si los datos son importantes, guarda el resultado e inspecciónalo manualmente:
|
|
Después de confirmar que el orden dentro de cada grupo de duplicados coincide con lo esperado, ejecuta:
|
|
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:
|
|
Esto significa:
dir_atiene la prioridad más alta.dir_bviene después.dir_ctiene 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:
|
|
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:
aes el directorio base más importante.- Un subdirectorio dentro de
bes más importante que el resto deb. ces principalmente un directorio de respaldo de baja prioridad.
El orden de rutas puede extenderse más:
|
|
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:
|
|
Luego pásalas a fdupes con xargs:
|
|
Si las rutas pueden contener espacios, usa entrada separada por nulos para mayor seguridad:
|
|
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:
|
|
Hábito de operación más seguro
Si los directorios contienen datos importantes, no empieces con -rdN. Un flujo más seguro es:
- Ejecutar primero
fdupes -r a b cpara ver grupos de duplicados. - Confirmar que el primer archivo de cada grupo es el que quieres conservar.
- Luego ejecutar
fdupes -rdN a b cpara eliminación automática. - 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:
|
|
Para dar mayor prioridad a un subdirectorio, escríbelo antes de su directorio padre:
|
|
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.