목적:
폴더 및 모든 하위 폴더에서 처음 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
로 시작된 명령이-exec
rc=0으로 반환되지 않으면 다음 파일로 건너뜁니다. 그렇지 않으면 해당 파일에 대해 필터 또는 작업을 계속 실행합니다. 다음 파일은-delete
이전 필터가 실패하지 않은 경우에만 실행됩니다.
이를 사용하여 파일을 삭제하지 않고 기술을 시도하고 대신 이름을 표시할 수 있습니다.
find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -exec printf "Would delete: %s\n" {} \;