file
コマンドは、ファイルで使用できるバイナリタイプを検出できます。
file -b /usr/bin/atrm
setuid Mach-O universal binary with 3 architectures
/usr/bin/atrm (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/atrm (for architecture i386): Mach-O executable i386
/usr/bin/atrm (for architecture ppc7400): Mach-O executable ppc
したがって、適切な検索とフィルタリングを使用するだけです。このようなものは、PPCサブセクションを持つシステム上のバイナリをすべて見つけなければなりません。
find/-perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}'
PPCは少し難しいです。そのためには、3つのコマンドを使って/ tmpに2つのファイルを作成し、最初にPPCファイルのリストを、2番目に32または64ビットのx86ファイルのリストを作成することができます。好都合なことに、 'ppc'はppcとppc64にマッチします。そして
find/-perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}' > /tmp/ppc
find/-perm -u+x ! -type d -exec file {} \; | grep i386 | awk '{print $1}' > /tmp/x86
find/-perm -u+x ! -type d -exec file {} \; | grep x86_64 | awk '{print $1}' >> /tmp/x86
、ソート/ビット(単にパスをソートし、各バイナリが一度だけ表示されている確認します)UNIQ:吐き出すする差分(ビット以上の処理)を使用し、そして
cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered
をppcのみのファイルのリスト:
diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'
最終結果は、ppc実行可能なmach-oセクションのみを含むファイルのリストにする必要があります。私は何かをヌックする前にリストを確認することをお勧めします。
いくつかの注意:上記の
すべてがターミナルで行われます。
これはちょうどハックです。それは私のシステムでうまくいきました。私は同じことを知りたいので頼んだことをうれしく思います。しかし、それはちょうどハックです。
次は、ファイル全体の階層を横断せずに、ただ一つのラインで動作するようです: mdfind -0「kMDItemContentTypeTree == "public.executable" '| xargs -0 -n 1 sh -c 'lipo = "$(lipo -info" $ 1 "2>/dev/null)"; *:*:*:*:*:*:*:&& "$ lipo"!= *:*:* i386 * && "$ lipo"!= *:*:* x86_64 *]];エコー "$ 1"; fi 'sh –
それは私を驚かせる。上記のすべてを* my *シェルにコピー/ペーストします。 *あなたの*シェルは異なる場合があります。 :)私はtcsh、btwを使用しています。 – bbum
'file'は複数のアーキテクチャを持つファイルに対して' 'for architecture'' ...を表示するので、10.11のような最近のバージョンのOS Xで動作する一行コマンドを理解しやすくします:' find/-perm -u + x!型d -execファイル{} \; | grep -v 'for arch' | grep ppc | cut -d:-f1' –