2 votos

¿Cómo puedo buscar en 360.000 archivos, unos 280 GB?

Tengo una carpeta (técnicamente en este caso, una imagen de disco montada de sólo lectura) que contiene una tonelada de datos que obtuve al ejecutar Data Rescue (una aplicación de recuperación de datos) en una de mis grandes unidades de servidor. Hice varios tipos de escaneo diferentes y volqué todos los archivos en un solo lugar. Data Rescue "reconstruye" los archivos borrados y a menudo no lo hace del todo bien. Puede categorizar mal el tipo de archivo que es, y puede mezclar archivos separados.

Estoy buscando dos archivos PHP específicos (y quizás unos 5 más si tengo suerte). La mayoría de estos archivos recuperados no tienen nombre (0002, 0003, etc.), así que tengo que buscar por contenido.

He encontrado 6 cadenas diferentes que deberían poder identificar estos archivos específicos. Así que necesito una manera de buscar en el contenido de los archivos, no en una forma de "búsqueda mágica" de Apple, sino en una forma de "leer manualmente a través de cada archivo en busca de una cadena de coincidencia".

grep parece la opción obvia, pero no ha dado más que problemas. grep puede buscar recursivamente, y puede descomprimir archivos gzip, zip y bzip, lo cual está muy bien. Pero después de unos minutos de ejecución, comienza a emitir errores de "demasiados archivos abiertos". No estoy seguro de por qué, es como si grep no cerrara un archivo después de abrirlo para buscar en él. También he tenido problemas con grep simplemente se detiene... no se cierra, no se bloquea, no deja de responder, pero no utiliza más CPU, no lee nada del disco, simplemente se queda inactivo cuando debería estar buscando. TAMBIÉN he tenido problemas al ejecutar múltiples grep búsquedas a la vez. grep parece cargar los archivos línea por línea, por lo que algo como una imagen de disco se carga por completo en la memoria antes de la búsqueda. Pero sólo hay un archivo en todo este paquete que es más grande que la cantidad de RAM que tengo. Así que mientras hago una grep a la vez, debería estar bien.

Este es el comando que estoy usando (envuelto en un script que hace varios comandos a diferentes archivos de salida, con alguna salida de estado): zfgrep -l -r -a -J -i -s -U -n "#32cd32" /Volumes/\'Storage\'\ Original\ Recovery > 32cd32.txt

Esto funcionará durante un tiempo, luego se colgará. Obtendré algunos resultados pero no una búsqueda completa. Si quito el -s , me llega la avalancha de too many open files errores. Luego, por sugerencia de otra persona, uso find para alimentar los archivos a grep uno a la vez, así:

find /Volumes/\'Storage\'\ Original\ Recovery -exec zfgrep -l -r -a -J -i -s -U -n "#32cd32" {} \; -print > 32cd32.txt

Pero ese comando tiene exactamente los mismos problemas.

Así que esto me deja atascado. ¿Cómo puedo buscar en cada uno de los archivos de esta imagen de disco, incluidos los archivos, algunas cadenas de texto sin formato. ¿Incluyendo los archivos de datos binarios que pueden haber sido incorrectamente fusionados con archivos de texto plano? Esto no parece una tarea tan difícil para un ordenador moderno de varios núcleos con un sistema operativo actual, mucha memoria RAM y un SSD.

En realidad, preferiría una opción de GUI, pero en este punto tomaré cualquier solución que funcione.

También empecé a intentar hacer esto usando BBEdit, pero se saltaba un montón de tipos de archivos incluso cuando le decías que buscara en todos los archivos. Incluso los archivos basados en XML. Esto me sorprendió mucho.

1voto

Utilizando find ... -exec grep -r recorre efectivamente todo el directorio varias veces (una vez como parte del find una vez como parte de cada grep -r ) que puede dar lugar a los errores que usted ve. Así que debería deshacerse del find o el -r . Al utilizar el grep parte para identificar los archivos que se van a recoger, es probablemente la -r en su caso.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X