システムでアプリケーション、ライブラリ(/ usr / local/libおよび/usr/ local)、およびPPCのみのバイナリを検索するスクリプトを作成する方法についてのポインタはありますか?
システムをPPCMacからLeopard10.5を実行しているIntelMacにアップグレードしました。次に、Rosettaに付属していないSnowLeopard10.6にアップグレードしました。だから私は今、私のシステムに残っているすべての古いPPCのものに気づいています!
システムでアプリケーション、ライブラリ(/ usr / local/libおよび/usr/ local)、およびPPCのみのバイナリを検索するスクリプトを作成する方法についてのポインタはありますか?
システムをPPCMacからLeopard10.5を実行しているIntelMacにアップグレードしました。次に、Rosettaに付属していないSnowLeopard10.6にアップグレードしました。だから私は今、私のシステムに残っているすべての古いPPCのものに気づいています!
この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
次に、少し並べ替え/一意にします(パスを並べ替えて、各バイナリが1回だけリストされるようにします)。
cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered
次に、diff(およびもう少し処理)を使用して、ppcのみのファイルのリストを吐き出します。
diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'
最終結果は、ppc実行可能mach-oセクションのみを含むファイルのリストになります。何かを削除する前に、リストを確認することをお勧めします。
いくつかのメモ:
上記のすべてはターミナルで行われます。
これは単なるハックです。それは私のシステムでうまく機能しました、そして私が同じことを知りたかったのであなたが尋ねてくれてうれしいです。しかし、それは単なるハックです。
アプリケーションを見つけるには、System Profiler(Lionではシステム情報と呼ばれます)を使用できます。
サイドバーの[ソフトウェア]の下を見て、[アプリケーション]を選択します...次に、情報が収集されるまで長時間待ちます。
Kevin Ballardの回答に基づいて、これはMountainLionで機能します。
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
また、Rosettaには10.6が付属していることに注意してください。これはオプションのインストールの1つにすぎません。インストールに使用したDVDを確認してください。
実際、これらのアプリケーションの1つを起動しようとすると、インストールするように求められるはずです。