Найдите все библиотеки, бинарные файлы и приложения PPC в Snow Leopard

Есть ли у вас какой-нибудь указатель на то, как написать сценарий, который будет искать в моей системе приложения, библиотеки (т.е. / usr / local / lib и / usr / local) и двоичные файлы, предназначенные только для PPC?

Я обновил свою систему с PPC Mac до Intel Mac с Leopard 10.5. Затем я обновился до Snow Leopard 10.6, которого нет в Rosetta. Так что я только сейчас осознаю все старые вещи PPC, которые остались в моей системе!


person Daniel Farrell    schedule 10.09.2009    source источник


Ответы (5)


Команда 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 немного сложнее. Для этого вам нужно выполнить три команды для создания 2 файлов в / tmp, первая из которых содержит список файлов PPC, а вторая - список 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

Затем используйте diff (и немного больше обработки), чтобы выдать список файлов, которые являются только ppc:

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

Конечным результатом должен быть список файлов, которые содержат только исполняемые разделы mach-o ppc. Я бы посоветовал проверить список, прежде чем нанести ядерный удар.

Некоторые примечания:

Все это делается в Терминале.

Это просто взлом; он отлично работал в моей системе, и я рад, что вы спросили, потому что я хотел узнать то же самое. Но это всего лишь взлом.

person bbum    schedule 10.09.2009
comment
Похоже, что следующее работает только в одной строке, без обхода всей файловой иерархии: 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 *]]; затем echo $ 1; рыбы - person Lily Ballard; 11.09.2009
comment
Это меня не удивляет. Все вышеперечисленное скопируйте / вставьте в оболочку my. Ваша оболочка может отличаться. :) Я использую tcsh, кстати. - person bbum; 11.09.2009
comment
Поскольку file отображает _2 _... для файлов с несколькими архитектурами, воспользуйтесь этим преимуществом, чтобы сделать простую для понимания однострочную команду, которая работает даже с последними версиями OS X, такими как 10.11: find / -perm -u+x ! -type d -exec file {} \; | grep -v 'for arch' | grep ppc | cut -d: -f1 - person Mr. Lance E Sloan; 16.02.2016

Чтобы найти приложения, вы можете использовать профилировщик системы (в Lion называется системной информацией).

Посмотрите в разделе «Программное обеспечение» на боковой панели и выберите «Приложения» ... затем подождите, пока он соберет информацию.

person docwhat    schedule 20.07.2011
comment
Чтобы уточнить: затем вы можете отсортировать список по типу, в котором будут перечислены все приложения PPC вместе. - person beporter; 29.10.2011
comment
Правильный. Я забыл об этом шаге. :-) - person docwhat; 09.11.2011
comment
Он называется «Системная информация на Mavericks» и более поздних версиях. - person Dave Land; 02.02.2016

Основываясь на ответе Кевина Балларда, это работает в 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
person freytag    schedule 13.02.2013

Также обратите внимание, что Rosetta поставляется с 10.6 - это всего лишь одна из дополнительных установок. Проверьте DVD, с которого вы его устанавливали.

person Community    schedule 10.09.2009
comment
Его также можно установить из Интернета, если вы решите установить его при попытке запустить приложение PPC. - person Bavo; 15.09.2009

Фактически, он должен попросить вас установить его, когда вы попытаетесь запустить одно из этих приложений.

person Community    schedule 10.09.2009