Cómo encontrar archivos que no tienen un duplicado en un directorio separado

Cómo encontrar archivos que no tienen un duplicado en un directorio separado

Tengo una copia de seguridad antigua de documentos. En mi Documentsdirectorio actual, existen muchos de estos archivos.en diferentes lugares con diferentes nombres. Estoy tratando de encontrar una manera de mostrar qué archivos existen en la copia de seguridad que sí lo hacen.noexiste en el Documentsdirectorio, preferiblemente agradable y GUI para que pueda ver fácilmente unalotede documentos.

Cuando busco esta pregunta, mucha gente busca formas de hacer lo contrario. Hay herramientas comoFSlintyDupeGuru, pero muestran duplicados. No hay modo invertido.

Respuesta1

Si está listo para usar CLI, el siguiente comando debería funcionar para usted:

diff --brief -r backup/ documents/

Esto le mostrará los archivos que son únicos para cada carpeta. Si lo desea, también puede ignorar los casos de nombre de archivo con el--ignore-file-name-case

Como ejemplo:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

Además, si desea informar sólo cuando los archivos difieren (y no informar la "diferencia" real), puede utilizar la --briefopción como en:

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

Existen varias herramientas de diferencias visuales que meldpueden hacer lo mismo. Puede instalar melddesde el repositorio del universo mediante:

sudo apt-get install meld

y utilice su opción "Comparación de directorios". Seleccione la carpeta que desea comparar. Después de la selección, puedes compararlos uno al lado del otro:

ingrese la descripción de la imagen aquí

fdupeses un excelente programa para encontrar archivos duplicados pero no enumera los archivos no duplicados, que es lo que estás buscando. Sin embargo, podemos enumerar los archivos que no están en la fdupessalida usando una combinación de findy grep.

El siguiente ejemplo enumera los archivos que son exclusivos de backup.

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt

Respuesta2

Tuve el mismo problema con muchos archivos muy grandes y hay muchas soluciones para duplicados pero no para la búsqueda invertida, y tampoco quería buscar diferencias de contenido debido a la gran cantidad de datos.

Así que escribí este script en Python para buscar "archivos aislados".

isolated-files.py --source folder1 --target folder2

esto mostrará cualquier archivo (recursivamente) dentro de la carpeta2 que no esté en la carpeta1 (también recursivamente). También se puede utilizar en conexiones ssh y con varias carpetas.

verhttps://github.com/ezzra/isolated-files

Respuesta3

Pensé que el mejor flujo de trabajo para fusionar copias de seguridad antiguas con miles de archivos, archivados en diferentes directorios con diferentes nombres es usardupeGurudespués de todo. Se parece mucho alduplicadospestaña deFSlint, pero tiene la característica extra importante de agregar fuentes como'referencia'.

  1. Agregue su directorio de destino (por ejemplo ~/Documents, ) comoreferencia.
    • Areferenciaes de solo lectura y no se eliminará ningún archivo
  2. Agregue su directorio de respaldo comonormal.
  3. Encuentra duplicados. Elimine todos los duplicados que se encuentren en la copia de seguridad.
  4. Solo le quedarán archivos únicos en el directorio de respaldo. UsarSincronización de archivos gratuitosofusionarpara fusionarlos o fusionarlos manualmente.

Si tiene varios directorios de respaldo antiguos, tiene sentido fusionar primero el directorio de respaldo más nuevo como este y luego usar este directorio de respaldo como directorio.referenciapara limpiar sus duplicados de las copias de seguridad anteriores antes de fusionarlos en el directorio principal de documentos. Esto protege unlotede trabajo donde no tiene que eliminar archivos únicos que desea eliminar de las copias de seguridad en lugar de fusionarlos.

Recuerde hacer una copia de seguridad nueva después de haber destruido todas las copias de seguridad antiguas en el proceso. :)

Respuesta4

jdupestiene dos opciones útiles para esto: -I --isolatey -u --print-unique.

Por ejemplo, para enumerar archivos únicos sólo en el backupdirectorio:

jdupes -Iru Documents backup |grep '^backup

información relacionada