Dan*_*ell 5 macos osx-snow-leopard
您是否有任何关于如何编写脚本的指针,该脚本将在我的系统中搜索应用程序,库(即/ usr/local/lib和/ usr/local)以及仅作为PPC的二进制文件?
我将系统从PPC Mac升级到运行Leopard 10.5的Intel Mac.然后我升级到Snow Leopard 10.6,它没有Rosetta.所以我现在才意识到系统上剩下的所有旧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
Run Code Online (Sandbox Code Playgroud)
那么,这只是适当地使用查找和过滤的问题.像这样的东西应该找到系统上有PPC子部分的所有二进制文件.
find / -perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
然后,排序/ uniq一点(只是对路径进行排序,并确保每个二进制文件只列出一次):
cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered
Run Code Online (Sandbox Code Playgroud)
然后,使用diff(以及更多处理)来喷出仅限ppc的文件列表:
diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'
Run Code Online (Sandbox Code Playgroud)
最终结果应该是仅包含ppc可执行mach-o部分的文件列表.我会建议在核实之前验证清单.
一些说明:
以上所有都在终端完成.
这只是一个黑客; 它在我的系统上工作得很好,我很高兴你问,因为我想知道同样的事情.但这只是一个黑客.
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |