您是否有任何關於如何編寫將在系統中搜索應用程序,庫(即/ usr/local/lib和/ usr/local)的腳本以及只有PPC的二進制文件?在Snow Leopard中查找所有PPC庫,二進制文件和應用程序
我將我的系統從PPC Mac升級到運行Leopard 10.5的Intel Mac。然後我升級到了與羅塞塔不同的Snow Leopard 10.6。所以我現在才意識到我的系統中剩下的所有舊PPC事物!
您是否有任何關於如何編寫將在系統中搜索應用程序,庫(即/ usr/local/lib和/ usr/local)的腳本以及只有PPC的二進制文件?在Snow Leopard中查找所有PPC庫,二進制文件和應用程序
我將我的系統從PPC Mac升級到運行Leopard 10.5的Intel Mac。然後我升級到了與羅塞塔不同的Snow Leopard 10.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只有一點困難。爲此,您需要執行三條命令在/ tmp中創建2個文件,第一個文件包含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/:$//'
最終結果應該是僅包含ppc可執行文件的文件列表。我會建議在覈對任何東西之前核實清單。
一些注意事項:
以上都是在終端中完成的。
這只是一個破解;它在我的系統上工作得很好,我很高興你問,因爲我想知道這一點。但它只是一個黑客。
另請注意Rosetta附帶10.6 - 這只是其中一個可選安裝。檢查您用來安裝的DVD。
如果您在嘗試運行PPC-app時選擇安裝它,它也可以從互聯網上安裝它。 – Bavo 2009-09-15 10:15:34
事實上,它應該要求您在嘗試啓動其中一個應用程序時安裝它。
要查找應用程序,可以使用System Profiler(在Lion中調用系統信息)。
查看側邊欄中的「軟件」並選擇「應用程序」...然後在收集信息時等待很長時間。
澄清:您可以通過「Kind」對列表進行排序,該列表將一起列出所有PPC應用程序。 – beporter 2011-10-29 19:56:26
正確。我忘了那一步。 ':-)' – 2011-11-09 02:20:02
它在小牛和以後也被稱爲「系統信息」。 – 2016-02-02 18:34:08
基於凱文·巴拉德的答案,這一個在山獅的工作原理:
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
下似乎只有一條線的工作,而無需遍歷整個文件層次: 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 *]];然後回顯「$ 1」; fi'sh – 2009-09-11 00:11:04
這讓我感到驚訝。以上所有複製/粘貼到* my * shell。 *您的* shell可能會有所不同。 :)我使用tcsh,順便說一句。 – bbum 2009-09-11 03:38:32
由於'file'顯示「'對於具有多個體繫結構的文件」''architecture' ...「,因此利用它可以輕鬆理解單行命令,該命令甚至可以與最新版本的OS X 10.11一起使用:'find/-perm -u + x! -type d -exec file {} \; | grep -v'爲arch'| grep ppc | cut -d:-f1' – 2016-02-16 14:17:49