¿No encuentra ninguna forma de buscar archivos que contengan 100% NULL?

¿No encuentra ninguna forma de buscar archivos que contengan 100% NULL?

Perdí mi carpeta de Escritorio (tenía muchas cosas allí... tal vez 1000 archivos). Y usé una herramienta para recuperar los archivos eliminados de inmediato. Si encontró todos los archivos eliminados y los recuperó. Todos se veían bien en cuanto a fechas y tamaños, etc. Entonces, los copié nuevamente a la carpeta de mi escritorio, solo para descubrir que cada uno de ellos era 100% NUL en su interior. No creo que ni siquiera tengan devoluciones de carruaje. Sólo una larga cadena de valores nulos. Sin embargo, los archivos tienen el tamaño correcto. Entonces..

Afortunadamente, tenía una copia de seguridad antigua de hace un mes y medio y pude restaurar aproximadamente el 80% de los archivos.

Pero ahora tengo el 20% de los archivos, llenos de NULL repartidos por todo el escritorio y las carpetas del escritorio.

No conozco Python y no encuentro ninguna herramienta para identificar estos archivos. ¿Me parece una locura que no haya ninguna herramienta que alguien haya creado que pueda encontrar un archivo que esté lleno de 100% NUL 00 caracteres? Ahora tengo 61 años y estoy jubilado, pero era desarrollador de software y no quiero aprender un idioma solo para hacer esto. Esto parece una oportunidad para que alguien cree una herramienta para compartir. Probé grepWin usando búsquedas Regex y busqué por todas partes, pero encontré que muchas personas intentaron hacer lo mismo y fallaron.

Tengo algunos archivos NUL de muestra para probar. No veo ninguna manera de subirlos aquí..

Respuesta1

Gracias Pablo. Por alguna razón no puedo comentar tu respuesta. Dice que "debo tener 50 reputación para comentar". ¿Quizás porque mi pregunta fue migrada desde los foros de Unix? NO SÉ..

¿Su respuesta es un comando grep? Si es así, también necesito alguna dirección básica sobre esto. Busqué y busqué y probé grepWin (que no puedo encontrar archivos 100% nulos) y descargué grep3.4 (¿pero ningún comando funciona? ¿Quizás necesita una configuración de ruta del sistema?, IDK), y encontré GnuWin (que no creo que sea lo que quiero, ya que parece que es solo para sistemas de 32 bits y estoy en Win 10 64)... También busqué tutoriales para principiantes, pero ninguno mostraba cómo simplemente configure Grep para que funcione. Todos comienzan a mostrarle comandos básicos...

Nuevamente, gracias por responder. Odio ser una molestia... Cualquier ayuda es muy apreciada, ya que he estado tratando de resolver esto durante aproximadamente 5 días... y me siento bastante estúpido en este momento.

Respuesta2

Perdón por la demora. No recibí una notificación de tu respuesta porque comenté como invitado.

Este es un script probado que podría necesitar una pequeña adaptación.

#! /bin/bash

    find 2>/dev/null . -type f -size +0c | while IFS= read -r fn; do
        NN="$( head --bytes=128 "${fn}" | tr -d '\0' | wc -c )"
        (( NN > 0 )) && continue

        NN="$( tr -d '\0' < "${fn}" | wc -c )"
        (( NN > 0 )) && continue

        printf "rm -f '%s'\n" "${fn}"
    done

Tal como está escrito, crea una lista de comandos para eliminar todos los archivos en un árbol de directorios que son completamente caracteres NUL. Podrías redirigir esa lista a un archivo para verificarla y luego simplemente bash < myRmFile. O simplemente podrías ponerlo | bashdirectamente después de terminar.

El bucle externo find ...; do ... donebusca el directorio de forma recursiva desde donde lo ejecuta. Las opciones para buscar seleccionan solo archivos normales de al menos un byte de tamaño, y luego leemos los nombres en la variable fn uno a la vez.

Las dos líneas siguientes son un optimizador de verificación previa para ahorrar la lectura de la totalidad de cada archivo. Comprueba sólo los primeros 128 bytes, porque cualquier archivo decente no tendrá 128 bytes NUL y luego algo más.

Entonces asignamos un recuento a NN a partir de una canalización de tres comandos. Selecciona headlos primeros 128 bytes, trelimina todos los NUL y wc -ccuenta lo que queda. Si quedan bytes que no sean NUL, continuamos con el siguiente nombre de archivo.

Las siguientes dos líneas hacen lo mismo, pero en todo el archivo, en caso de que encontremos un archivo "no decente".

Cualquier cosa que falle en ambas comprobaciones genera una instrucción rm para ese archivo.

Esto es un poco extraño en algunos nombres de archivos extremos, aquellos que contienen comillas simples o nuevas líneas en el nombre. Y ejecuta un proceso rm por archivo, pero parece que solo tienes unos 200, por lo que eso no es crítico.

Publica de nuevo si tienes problemas.

información relacionada