Windows 또는 Linux에서 16진수 00 00 FF FF로 시작하는 파일을 재귀적으로 검색하고 삭제합니다.

Windows 또는 Linux에서 16진수 00 00 FF FF로 시작하는 파일을 재귀적으로 검색하고 삭제합니다.

목적:

폴더 및 모든 하위 폴더에서 처음 4바이트가 16진수 시퀀스 00 00 FF FF로 시작하는 파일(예: *.dat)을 검색하고 파일을 삭제할 때마다 확인 메시지를 표시하지 않고 일치하는 모든 파일을 삭제합니다.

예를 들어:

리눅스에서는 grep + find + hexdump + rm 조합을 생각하고 있었습니다.

예를 들어:

rm -r 일치하는 파일을 재귀적으로 삭제

hexdump -n4 *.dat 파일의 처음 4바이트 추출

grep '\x00\x00\xFF\xFF' *.dat 반환된 hexdump 00 00 FF FF와 일치하는 파일 찾기

--중요-- 처음 4바이트에만 16진수 00 00 FF FF가 있는지 확인하세요!

00 00 FF FF가 있든 파일의 다른 곳에는 없든 상관없습니다! (처음 4바이트만 확인하면 됨)

또한 현재 폴더와 모든 하위 폴더에 있는 모든 *.dat 파일을 검사해야 한다는 점을 기억하세요.

그리고 00 00 FF FF는 정확히 이 순서대로 이루어져야 합니다.

Windows에서 가능한 경우 최상의 솔루션입니다(타사 유틸리티를 사용해야 하는 경우에도). 하지만 Linux에서 실행되는 솔루션이 있으면 기쁠 것입니다.

다음 명령을 시도했지만 아무것도 반환하지 않으며 0000FFFF로 시작하는 *.dat 파일이 있다고 확신합니다.

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

필요한 모든 명령을 파이프하는 방법을 알 수 없습니다.

이를 수행하는 방법에 대한 아이디어가 있습니까?

미리 감사드립니다!

답변1

이 같은:

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

슬로 모션:

  • find . -type f현재 디렉토리 아래의 모든 일반 파일을 검색합니다.
  • hexdump -n4 $1 | grep -q "^0000000 0000 ffff"이러한 각 파일에서 파일이 다음으로 시작하면 0을 반환하는 한 줄 bash 명령을 실행합니다.00 00 FF FF
  • find로 시작된 명령이 -execrc=0으로 반환되지 않으면 다음 파일로 건너뜁니다. 그렇지 않으면 해당 파일에 대해 필터 또는 작업을 계속 실행합니다. 다음 파일은 -delete이전 필터가 실패하지 않은 경우에만 실행됩니다.

이를 사용하여 파일을 삭제하지 않고 기술을 시도하고 대신 이름을 표시할 수 있습니다.

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

관련 정보