2011-02-10 46 views
7

我開始懷疑這是甚至可能的,因爲對SO,Google,Bing和linuxquestions.org的多個搜索都沒有任何結果。如何編寫一個魔術文件測試模式來匹配文件的結尾?

我想擴展位於/usr/share/magic(由file(1)實用程序使用)中的魔法模式,以基於文件結尾處或附近的數據識別文件。我已經可以在文件的開頭執行此操作,並可以從頭開始對文件進行任意偏移。

手冊頁在說明一些標準用例方面做得很好;不幸的是,似乎沒有辦法從末尾而不是開始索引。唯一的解決辦法是採用使用tac和/或lreverse的腳本方法,但覺得這些方法可能對二進制數據不友好。

此外,我想避免任何其他腳本處理 - 我覺得這應該是可行的與正確的文件魔術。有任何想法嗎?

回答

5

這是不可能的。 file(1)也可用於管道。您不能在管道上使用lseek(2)以到達文件末尾。讀取整個文件直到最後會很慢(並且file(1)盡力快速),並且如果它實際上是從管道讀取的,它可能永遠不會遇到文件的結尾,這會更糟糕。

至於文檔,對於開源軟件,源代碼本身就是最終的文檔。如果你遇到像這樣的情況,那麼看看它總是一個好主意。在src/magic.c中的功能file_or_fd()給出了線索​​。使用來源,盧克! ;-)

在你的具體情況下,我會再看看有問題的文件格式,如果真的不能被file(1)解析,那麼一個簡短的Perl或Python腳本應該可以做到。祝你好運!

+0

麥克,謝謝你這個清晰簡潔的解釋。我不知道爲什麼,但我從來沒有想過看源代碼。這也許是我可以收到的最好的提示!再次感謝, -Arj – jayce 2011-04-27 17:13:26

相關問題