2016-04-29 13 views
1

に存在するかどうかを確認してください私はこのようなディレクトリ構造を持っていると言う:バイナリファイルがサブフォルダ

+---A 
| +---A 
| \---B 
+---B 
| \---A 
|  \---A 
+---C 
| 
| 
[...] 

それらのフォルダ内のすべてのファイルがバイナリである場合にはどうすれば(1)クロールすべてのフォルダとサブフォルダと(2)を確認することができますファイル?

+0

"バイナリファイル"の定義は何ですか? –

+0

「バイナリ」とは、「文字として解釈されないバイトを含む」ということです。この場合、私はバイトコードファイル( '.class'など)を見つけるのに興味がありますが、ソースファイル(' .java'など)は見つけられません。 –

+1

技術的には、すべてのファイルはバイナリです...もしあなたが非テキストを意味するならば、 'find。 - 型f -exec some_app_to_test_for_binaryness {} \; 'は行く1つの方法です。 –

答えて

1

findは、通常、ディレクトリツリーの検索に使用されます。

file -iは、ファイルのMIMEタイプ情報を印刷するために使用できます。シンボリックリンクではなく、いないディレクトリなど

exec file -i {} +は、ディレクトリツリーで検出された各通常のファイルにfile -iを実行します。

find . -type f -exec file -i {} + | grep ":[^:]*executable[^:]*$" | sed 's/^\(.*\):[^:]*$/\1/' 

-type fは、通常のファイルを選択するフィルタである:

これを試してみてください。

file -iは、MIMEタイプの文字列を印刷している:

file -i /bin/bash 
/bin/bash: application/x-executable; charset=binary 

grep ":[^:]*executable[^:]*$"executable

sed 's/^\(.*\):[^:]*$/\1/'が含まれているMIMEタイプ文字列を持つファイルは、余分なMIMEタイプの情報がなく、ファイル名のみを印刷するためにラインをクリーンアップ選択します。

関連する問題