Busque recursivamente y elimine archivos que comiencen con hexadecimal 00 00 FF FF en Windows o Linux

Busque recursivamente y elimine archivos que comiencen con hexadecimal 00 00 FF FF en Windows o Linux

Objetivo:

Busque en una carpeta y en todas las subcarpetas archivos (ejemplo: *.dat) que comiencen con la secuencia hexadecimal 00 00 FF FF en los primeros 4 bytes y elimine todos los archivos coincidentes sin solicitar confirmación en cada eliminación de archivos.

Por ejemplo:

En Linux estaba pensando en un grep + find + hexdump + rm combinado

Por ejemplo:

rm -r eliminar archivos coincidentes de forma recursiva

hexdump -n4 *.dat para extraer los primeros 4 bytes del archivo

grep '\x00\x00\xFF\xFF' *.dat para buscar archivos que coincidan con el volcado hexadecimal devuelto 00 00 FF FF

--IMPORTANTE-- ¡compruebe si hay hexadecimal 00 00 FF FF solo en los primeros 4 bytes!

¡No importa si hay 00 00 FF FF o no en ningún otro lugar del archivo! (sólo es necesario comprobar los primeros 4 bytes)

Además, recuerde que debe escanear todos los archivos *.dat en la carpeta actual y todas sus subcarpetas.

Y 00 00 FF FF debe estar en esta secuencia exacta

La mejor solución si esto fuera posible en Windows (incluso si fuera necesario utilizar utilidades de terceros). Pero me alegraría tener una solución que se ejecute en Linux.

Probé el siguiente comando, pero no devuelve nada y estoy seguro de que hay archivos *.dat que comienzan con 0000FFFF

rm-r | grep '\x00\x00\xFF\xFF' | volcado hexadecimal -n4 *.dat

No puedo entender cómo canalizar todos los comandos necesarios.

¿Alguna idea sobre cómo hacer eso?

¡Gracias de antemano!

Respuesta1

Algo como esto:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -delete;

En cámara lenta:

  • find . -type fbuscará todos los archivos simples en el directorio actual
  • En cada uno de estos archivos, ejecutará el comando bash de una línea hexdump -n4 $1 | grep -q "^0000000 0000 ffff"que devuelve 0 si el archivo comienza con00 00 FF FF
  • findsalta al siguiente archivo si el comando iniciado -execno regresa con rc=0, de lo contrario continúa ejecutando filtros o acciones en ese archivo, siendo el siguiente el -deleteque se ejecuta solo si el filtro anterior no falló.

Puedes usar esto para probar la técnica sin eliminar archivos y mostrar sus nombres en su lugar:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -exec printf "Would delete: %s\n" {} \;

información relacionada