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タイプの情報がなく、ファイル名のみを印刷するためにラインをクリーンアップ選択します。
"バイナリファイル"の定義は何ですか? –
「バイナリ」とは、「文字として解釈されないバイトを含む」ということです。この場合、私はバイトコードファイル( '.class'など)を見つけるのに興味がありますが、ソースファイル(' .java'など)は見つけられません。 –
技術的には、すべてのファイルはバイナリです...もしあなたが非テキストを意味するならば、 'find。 - 型f -exec some_app_to_test_for_binaryness {} \; 'は行く1つの方法です。 –