Tengo una carpeta (técnicamente, en este caso, una imagen de disco montada de solo 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 unidades de servidor grandes. Hice varios tipos de escaneo diferentes y vacié todos los archivos en un solo lugar. Data Rescue 'reconstruye' los archivos eliminados y, a menudo, no lo hace del todo bien. Puede mal categorizar el tipo de archivo que es y puede juntar archivos separados.
Estoy buscando dos archivos PHP específicos (y quizás otros 5 si tengo suerte). La mayoría de estos archivos recuperados no tienen nombres (0002, 0003, etc.), así que tengo que buscar por contenido.
He creado 6 cadenas diferentes que deberían poder identificar estos archivos específicos. Así que necesito una forma de buscar el contenido de los archivos, no en una "búsqueda mágica" de Apple, sino en una vieja escuela "leer manualmente cada archivo buscando una" cadena de coincidencia de cadenas ".
grep
suena como la opción obvia, pero no ha sido más que problemas. grep puede buscar recursivamente, y puede descomprimir archivos gzip, zip y bzip, lo cual es bueno. Pero después de unos minutos de ejecución, comienza a transmitir errores de "demasiados archivos abiertos". No estoy seguro de por qué, es como si grep no cierra un archivo después de abrirlo para buscarlo. También he tenido problemas con grep
simplemente al detenerse ... no a dejar de fumar, no a fallar, a no responder, pero a no usar más CPU, a no leer nada del disco, a permanecer inactivo cuando debería estar buscando. También tuve problemas para ejecutar varias búsquedas de grep
a la vez. grep
parece cargar los archivos línea por línea, por lo que algo así como una imagen de disco hace que todo se cargue en la memoria antes de buscar. Pero solo hay un archivo en todo este paquete que es más grande que la cantidad de RAM que tengo. Entonces, mientras haga un grep
a la vez, debería estar bien.
Este es el comando que estoy usando (incluido en una secuencia de comandos que realiza varios comandos a diferentes archivos de salida, con algunos resultados de estado):
zfgrep -l -r -a -J -i -s -U -n "#32cd32" /Volumes/\'Storage\'\ Original\ Recovery > 32cd32.txt
Esto se ejecutará por un tiempo, luego se bloqueará. Obtendré algunos resultados pero no una búsqueda completa. Si elimino el -s
, obtengo la inundación de too many open files
errores. Luego, por sugerencia de otra persona, uso find
para alimentar archivos a grep
uno a la vez, de esta forma:
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 archivo de esta imagen de disco, incluidos los archivos, algunas cadenas de texto sin formato? ¿Incluidos archivos de datos binarios que pueden haberse fusionado incorrectamente con archivos de texto sin formato? Esto no parece una tarea tan difícil para una computadora moderna de múltiples núcleos con un sistema operativo actual, mucha memoria RAM y un SSD.
En realidad, preferiría una opción GUI, pero en este punto tomaré cualquier solución que funcione.
También originalmente comencé a intentar hacer esto con BBEdit, pero estaba omitiendo MUCHOS tipos de archivos incluso cuando le dices que busque en todos los archivos. Incluso los archivos que están basados en XML. Me sorprendió mucho esto.