2009-09-10 11 views
5

Czy masz jakiś wskaźnik na jak napisać skrypt, który będzie wyszukiwania mój system dla aplikacji, bibliotek (czyli/usr/local/lib i/usr/local) i pliki binarne, które są tylko PPC?Znajdź wszystkie PPC biblioteki, pliki binarne i aplikacje w systemie Snow Leopard

Uaktualniłem mój system z komputera PPC na komputer Mac z systemem Leopard 10.5. Następnie zaktualizowałem system do Snow Leopard 10.6, który nie jest dostarczany z Rosettą. Tak więc dopiero teraz uświadamiam sobie wszystkie stare rzeczy PPC, które pozostały w moim systemie!

Odpowiedz

9

Komenda file może wykryć, jakie są dostępne w pliku typów binarnych.

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 

Tak więc, jest to tylko kwestia odpowiedniego zastosowania funkcji wyszukiwania i filtrowania. Coś takiego powinno znaleźć wszystkie pliki binarne w systemie, które mają podsekcję PPC.

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

Tylko PPC jest nieco trudniejsze. W tym celu będziesz chciał wykonać trzy polecenia, aby utworzyć 2 pliki w/tmp, pierwszy zawierający listę plików PPC, a drugi listę 32- lub 64-bitowych plików x86. Dogodnie "ppc" pasuje do ppc i 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 

Następnie, sortowanie/Uniq nieco (tylko sortuje ścieżki i sprawia, że ​​każdy binarny jest wymienione tylko raz):

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

Następnie użycie diff (i nieco bardziej przetwarzanie) rzygać lista plików, które są jedynie ppc:

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

wynik końcowy powinien być lista plików, które zawierają tylko ppc wykonywalne sekcje Mach-o. Sugerowałbym zweryfikowanie listy przed nukingiem czegokolwiek.

Niektóre uwagi:

Wszystkie powyższe czynności są wykonywane w terminalu.

To tylko hack; działało dobrze na moim systemie i cieszę się, że pytasz, ponieważ chciałem to samo wiedzieć. Ale to tylko hack.

+2

Poniższy wydaje się działać tylko w jednej linii, bez przechodzenia przez całą hierarchię pliku: mdfind -0 „kMDItemContentTypeTree == "public.executable" "| xargs -0 -n 1 sh -c 'lipo = "$ (lipo -info" $ 1 "2>/dev/null)"; jeśli [["$ lipo" == *: *: * ppc * && "$ lipo"! = *: *: * i386 * && "$ lipo"! = *: *: * x86_64 *]]; następnie echo "$ 1"; fi 'sh –

+0

To mnie nie zaskakuje.Wszystkie powyższe kopiuj/wklej do * mojej * powłoki. * Twoja * powłoka może się różnić. :) Używam tcsh, btw. – bbum

+0

Ponieważ 'file' wyświetla" 'dla architektury' ..." dla plików z wieloma architekturami, skorzystaj z tego, aby stworzyć łatwe do zrozumienia polecenie jednoliniowe, które działa nawet z ostatnimi wersjami OS X jak 10.11: 'find/-perm -u + x! -type d -exec plik {} \; | grep -v "dla arch" | grep ppc | cut -d: -f1' –

1

Należy również pamiętać, że Rosetta jest dostarczana z wersją 10.6 - to tylko jedna z opcjonalnych instalacji. Sprawdź płytę DVD, której użyłeś do jej instalacji.

+0

Może również zainstalować z Internetu, jeśli zdecydujesz się zainstalować go podczas próby uruchomienia aplikacji PPC. – Bavo

0

W rzeczywistości, powinien poprosić o zainstalowanie go podczas próby uruchomienia jednej z tych aplikacji.

3

Aby znaleźć Aplikacje, można użyć Profilu systemu (Wywoływane informacje systemowe w Lion).

Sprawdź w "Oprogramowanie" na pasku bocznym i wybierz "Aplikacje" ... następnie poczekaj długo, aż zbierze informacje.

+1

Aby wyjaśnić: Możesz następnie posortować listę według "Rodzaju", która będzie zawierała listę wszystkich aplikacji PPC. – beporter

+0

Prawidłowe. Zapomniałem tego kroku. ':-)' –

+0

To się nazywa "Informacje o systemie" w Mavericks i później. –

2

podstawie odpowiedzi Kevin Ballard, działa w 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 
Powiązane problemy