2011-02-10 4 views
7

그래서 SO, Google, Bing 및 linuxquestions.org에 대한 여러 검색 결과가 없으므로 이것이 가능한지 궁금해지기 시작했습니다.파일 끝에 일치하는 마법 파일 테스트 패턴은 어떻게 작성합니까?

(file(1) 유틸리티에서 사용하는) /usr/share/magic에있는 마법 패턴을 확장하여 파일 끝에 있거나 그 근처에있는 데이터를 기반으로 파일을 인식하고 싶습니다. 나는 처음부터 파일에 대한 임의의 오프셋뿐만 아니라 파일의 시작 부분에서도이를 수행 할 수 있었다.

멘 페이지는 몇 가지 표준 사용 사례를 설명하는 데 매우 효과적입니다. 불행히도 처음부터 반대로 색인을 생성하는 방법이있는 것 같지 않습니다. 내가 해결할 수있는 유일한 방법은 tac 및/또는 lreverse을 사용하는 스크립트 방식을 채택하는 것이지만 이것이 바이너리 데이터에 비우호적이라고 생각하는 것입니다.

또한 나는 다른 스크립트 처리를 피하고자했습니다. 올바른 파일 매직으로 수행 할 수 있어야한다고 생각합니다. 어떤 아이디어?

답변

5

불가능합니다. file(1)도 파이프와 함께 작동하도록 설계되었습니다. 파이프 끝에 lseek(2)을 사용하여 파일의 끝까지 도달 할 수 없습니다. 끝까지 전체 파일을 읽는 것은 매우 느리고 (그리고 file(1)은 빠르려고합니다.) 실제로 파이프에서 읽는 중이라면 결코 파일의 끝 부분을 만날 수는 없습니다.

오픈 소스 소프트웨어의 경우, 소스 코드 자체가 궁극적 인 문서입니다. 이런 경우에 갇히게되면 항상 좋은 생각입니다. src/magic.c에있는 file_or_fd() 함수는 실마리를줍니다. 근원을 사용하십시오, 루크! ;-)

구체적인 경우 파일 형식을 다시 살펴보고, 실제로는 file(1)으로 구문 분석 할 수없는 경우 짧은 Perl 또는 Python 스크립트가 트릭을 수행해야합니다. 행운을 빕니다!

+0

맥,이 명확하고 간결한 설명에 감사드립니다. 이유는 모르겠지만 소스 코드를 살펴 본 적이 전혀 없습니다. 아마 내가받은 수있는 최고의 팁입니다! 다시 한 번 감사드립니다. -Arj – jayce

+0

@ 아리 : 안녕하세요. –