
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 f
buscará 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
find
salta al siguiente archivo si el comando iniciado-exec
no regresa con rc=0, de lo contrario continúa ejecutando filtros o acciones en ese archivo, siendo el siguiente el-delete
que 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" {} \;