2009-09-10 2 views
5

アプリケーション、ライブラリ(つまり/ usr/local/libと/ usr/local)を自分のシステムから検索するスクリプトの記述方法に関する指針がありますか? PPCのみのバイナリ?Snow LeopardのすべてのPPCライブラリ、バイナリ、およびアプリケーションを見つける

システムをPPC MacからLeopard 10.5を実行するIntel Macにアップグレードしました。その後、私はRosettaに付属していないSnow Leopard 10.6にアップグレードしました。だから私は今、私のシステムに残っているすべての古いPPCのことを実現しています!

答えて

9

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セクションのみを含むファイルのリストにする必要があります。私は何かをヌックする前にリストを確認することをお勧めします。

いくつかの注意:上記の

すべてがターミナルで行われます。

これはちょうどハックです。それは私のシステムでうまくいきました。私は同じことを知りたいので頼んだことをうれしく思います。しかし、それはちょうどハックです。

+2

次は、ファイル全体の階層を横断せずに、ただ一つのラインで動作するようです: 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 –

+0

それは私を驚かせる。上記のすべてを* my *シェルにコピー/ペーストします。 *あなたの*シェルは異なる場合があります。 :)私はtcsh、btwを使用しています。 – bbum

+0

'file'は複数のアーキテクチャを持つファイルに対して' 'for architecture'' ...を表示するので、10.11のような最近のバージョンのOS Xで動作する一行コマンドを理解しやすくします:' find/-perm -u + x!型d -execファイル{} \; | grep -v 'for arch' | grep ppc | cut -d:-f1' –

1

また、Rosettaには10.6が付属しています。これはオプションのインストールの1つです。インストールに使用したDVDを確認します。

+0

PPC-appを実行しようとしたときにインターネットにインストールすることもできます。 – Bavo

0

実際に、それらのアプリケーションの1つを起動しようとすると、インストールするように要求されるはずです。

3

アプリケーションを検索するには、システムプロファイラ(ライオンで呼び出されるシステム情報)を使用できます。

サイドバーの「ソフトウェア」の下にある「アプリケーション」を選択し、情報を収集するのに長い時間待ってください。

+1

明確にする:「Kind」でリストを並べ替えると、すべてのPPCアプリが一緒に表示されます。 – beporter

+0

正しい。私はそのステップを忘れてしまった。 ':-)' –

+0

それはマーベリックスの「システム情報」と呼ばれ、後でもあります。 –

2

ケビンバラードの回答に基づいて、この1つはマウンテンライオンで動作します。

mdfind -0 'kMDItemContentTypeTree == "public.executable"' | xargs -0 -n 1 sh -c 'lipo="$(lipo -info "$1" 2>/dev/null)"; if [[ "$lipo" == *ppc* && "$lipo" != *i386* && "$lipo" != *x86_64* ]]; then echo "$1"; fi' sh 
関連する問題