2011-02-10 6 views
7

SO、Google、Bing、linuxquestions.orgの複数の検索が何も出てこなかったので、これが可能かどうか疑問に思っています。ファイルの最後にマジックファイルのテストパターンを書き込むにはどうすればよいですか?

file(1)ユーティリティで使用されている)/usr/share/magicにある魔法のパターンを拡張して、ファイルの最後または近くのデータに基づいてファイルを認識することに興味があります。私はこれを、ファイルの最初の部分だけでなく、最初からファイルへの任意のオフセットについても行うことができました。

マニュアルページは、いくつかの標準的な使用例を説明するのに非常に役立ちます。残念ながら、始まりとは対照的に、最後からインデックスを作成する方法はないようです。私が思いつくことができる唯一の回避策は、tacおよび/またはlreverseを使用してスクリプト化されたアプローチを採用することでしたが、これらがバイナリデータに非友好的であるかもしれないと感じています。

また、私は他のスクリプト処理を避けたいと思っていました。これは、適切なファイルマジックで実行可能でなければならないと感じています。何か案は?

答えて

5

これはできません。 file(1)もパイプで動作するように設計されています。パイプ上でlseek(2)を使用してファイルの末尾に到達することはできません。最後までファイル全体を読むのは非常に遅いです(そして、file(1)は高速にしようとします)。パイプから実際に読み込んでいるのであれば、ファイルの終わりに遭遇することは決してありません。

オープンソースソフトウェアの場合、ソースコード自体は最終的なドキュメントです。このような場合に抱えている場合は、常に見ておくことをお勧めします。関数file_or_fd()src/magic.cにあります。ソース、ルークを使用してください! ;-)

具体的には、問題のファイル形式をもう一度見てください。実際にはfile(1)で解析できない場合は、短いPerlまたはPythonスクリプトで処理する必要があります。がんばろう!

+0

Mack、この明快で簡潔な説明をいただきありがとうございます。なぜか分かりませんが、ソースコードを見るのは決して私には起こりませんでした。それはおそらく私が受け取ったかもしれない最高のヒントです!再度ありがとうございます。 -Arj – jayce

+0

@Ari:よろしくお願い致します。 –

関連する問題