web-dev-qa-db-ja.com

ディレクトリ内のバイナリファイルを見つける方法は?

バイナリファイルをディレクトリで検索する必要があります。これをファイルで実行したいので、結果をgrepで確認します。しかし、私の問題は、バイナリファイルが何であるかわからないことです。バイナリファイルにfileコマンドを与えるもの、またはgrepで何をチェックする必要がありますか?

10

ただ言及する必要がありますPerl-Tテキストファイルとその反対のテスト-Bバイナリファイル。

$ find . -type f | Perl -lne 'print if -B'

見たバイナリファイルを出力します。使用する -T逆の場合:テキストファイル。

最初の1,000文字程度しか表示されないため、完全に万能というわけではありませんが、ここで提案されているいくつかのアドホックな方法よりも優れています。全体の概要についてはman perlfuncを参照してください。ここに要約があります:

「-T」および「-B」スイッチは次のように機能します。ファイルの最初のブロックなどが検査され、非ASCII文字を含む有効なUTF-8であるかどうかが確認されます。もしそうなら、それは「-T」ファイルです。それ以外の場合は、ファイルの同じ部分で、奇妙な制御コードや高ビットセットの文字などの奇数文字が検査されます。 3分の1を超える文字が奇妙な場合は、「-B」ファイルです。それ以外の場合は「-T」ファイルです。また、検査された部分にゼロバイトを含むファイルは、バイナリファイルと見なされます。

8
bobbogo

これにより、すべての非テキストベースのバイナリファイルおよび空のファイルが検索されます。

編集する

grepのみのソリューション(Mehrdadのコメントから):

grep -r -I -L .

元の答え

これには、findおよびgrep以外のツールは必要ありません。

find . -type f -exec grep -IL . "{}" \;

-Iはバイナリファイルを不一致と見なすようにgrepに指示します

-L一致しないファイルのみを印刷します

.はその他すべてに一致します


編集2

これにより、空でないすべてのバイナリファイルが検索されます。

find . -type f ! -size 0 -exec grep -IL . "{}" \;
6
t.animal

これは課題なので、完全な解決策を提供した場合、おそらく私を憎むでしょう;-)だから、ここに少しのヒントがあります:

空でないファイルに一致する.のような正規表現を検索すると、grepコマンドはデフォルトでバイナリファイルのリストを出力します。

grep . *

出力:

[...]
Binary file c matches
Binary file e matches

awkを使用してファイル名のみを取得し、lsを使用して権限を出力できます。それぞれのマニュアルページ(man grepman awkman ls)を参照してください。

2
Michael Jaros

質問への私の最初の回答は、findコマンドを使用してここでかなりインラインになりました。あなたの講師はあなたをmagic numbersfileコマンドを使用して、複数のタイプに分解します。

私の目的では、それは次のように単純でした。

file * | grep executable

しかし、それは多くの方法で行うことができます。

0
GuyA

Linuxのバイナリファイルの形式はELFです。

バイナリファイルでfileコマンドを実行すると、出力にはWord ELFが含まれます。これをgrepできます。

コマンドラインで:

file <binary_file_name>

0
Syed.Waris