
Estoy tratando de encontrar qué archivos no existen mediante una suma de verificación de su contenido. Tengo dos directorios /foo
y /bar
ambos directorios representan estados arbitrarios en el sistema, quiero encontrar todosarchivosen raíz /bar
que no existen en raíz /foo
(recursivamente). un diccionario de /bar/**
con
CheckSum -> filepath
menos el diccionario de /foo/**
con
CheckSum -> filepath
Puedo escribir esto usando md5sum o algo así, pero ya debe haber una utilidad que haga esto.
Para que quede claro, si dos archivos son idénticosexceptopor ubicación (nombre y ruta) quiero que se identifiquen como iguales.
Caso de prueba
Creemos un árbol con algunos datos de prueba,
/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│ └── findMe
└── quz
└── asdf
└── otherFileName (duplicate of /tmp/foo/myFile)
Guión para la creación,
mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz
# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName
# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10
Entonces el programa compara /tmp/foo
y /tmp/bar
debería encontrar/tmp/bar/qaz/findMe
Respuesta1
Generaría un listado md5sum (una columna para la suma y una columna para el nombre de archivo) para ambos árboles y canalizaría el resultado a un script (por ejemplo, awk o perl) que puede usar la suma como hash para los nombres de archivos y crearía el nombres de archivos de informes de secuencias de comandos que tienen el mismo valor hash.
Esto es más que una simple frase y es algo que se pregunta y se resuelve con frecuencia (una búsqueda en la web de archivos duplicados por contenido arroja más de un millón de resultados).
Puede que esto le resulte útil: