Domanda

Hai qualche suggerimento su come scrivere uno script che cercherà nel mio sistema applicazioni, librerie (cioè / usr / local / lib e / usr / local) e binari che sono solo PPC?

Ho aggiornato il mio sistema da un Mac PPC a un Mac Intel con Leopard 10.5. Quindi ho aggiornato a Snow Leopard 10.6 che non viene fornito con Rosetta. Quindi ora sto solo realizzando tutte le vecchie cose PPC che sono rimaste sul mio sistema!

È stato utile?

Soluzione

Il comando file può rilevare quali tipi binari sono disponibili in un 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

Quindi, allora, si tratta solo di usare trova e filtrando in modo appropriato. Qualcosa del genere dovrebbe trovare tutti i file binari sul sistema che hanno una sottosezione PPC.

find / -perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}'

Solo PPC è un po 'più difficile. Per questo, ti consigliamo di eseguire tre comandi per creare 2 file in / tmp, il primo contenente un elenco di file PPC e il secondo un elenco di file x86 a 32 o 64 bit. Convenientemente, "ppc" corrisponde a ppc e 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

Quindi, ordina / uniq un po '(ordina i percorsi e assicurati che ogni binario sia elencato una sola volta):

cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered

Quindi, usa diff (e un po 'più di elaborazione) per visualizzare l'elenco di file che sono solo ppc:

diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'

Il risultato finale dovrebbe essere un elenco di file che contengono solo sezioni mach-o eseguibili ppc. Suggerirei di verificare l'elenco prima di eseguire l'annotazione di qualcosa.

Alcune note:

Tutto quanto sopra è fatto nel Terminale.

Questo è solo un trucco; ha funzionato perfettamente sul mio sistema e sono contento che tu l'abbia chiesto perché volevo sapere lo stesso. Ma è solo un trucco.

Altri suggerimenti

Per trovare le applicazioni, è possibile utilizzare System Profiler (Informazioni sul sistema chiamato in Lion).

Guarda sotto " Software " nella barra laterale e scegli " Applicazioni " ... quindi attendi a lungo mentre raccoglie informazioni.

Basato sulla risposta di Kevin Ballard, questo funziona in Mountain Lion:

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

Nota anche che Rosetta viene fornito con 10.6: è solo una delle installazioni opzionali. Controlla il DVD con cui lo hai installato.

In effetti, dovrebbe chiederti di installarlo quando tenti di avviare una di quelle applicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top