El comando file
puede detectar qué tipos binarios están disponibles en un archivo.
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
Entonces, solo se trata de usar el método de búsqueda y filtrado de forma adecuada. Algo así debería encontrar todos los binarios en el sistema que tienen una subsección de PPC.
find/-perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}'
PPC solo es un poco más difícil. Para eso, querrá hacer tres comandos para crear 2 archivos en/tmp, el primero con una lista de archivos PPC y el segundo una lista de archivos x86 de 32 o 64 bits. Convenientemente, 'ppc' coincide con ppc y 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
A continuación, ordene/UniQ un poco (solo ordena los caminos y se asegura de cada binario solamente aparece una vez):
cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered
Entonces, el uso de diff (y un poco más procesamiento) para vomitar la lista de archivos que son sólo ppc:
diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'
el resultado final debe ser una lista de archivos que sólo contienen secciones mach-o ejecutables ppc. Sugeriría verificar la lista antes de desconectar cualquier cosa.
Algunas notas:
Todo lo anterior se realiza en el terminal.
Esto es solo un truco; funcionó muy bien en mi sistema y me alegro de que lo haya preguntado porque quería saber lo mismo. Pero es solo un truco.
El siguiente parece funcionar en una sola línea, sin recorrer toda la jerarquía de archivos: 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 *]]; luego repite "$ 1"; fi 'sh –
Eso no me sorprende.Todo lo anterior copia/pega en * my * shell. * Su * shell puede variar. :) Estoy usando tcsh, por cierto. – bbum
Dado que 'file' muestra" 'for architecture' ..." para archivos con varias arquitecturas, aproveche para hacer un comando de una línea fácil de entender que incluso funciona con versiones recientes de OS X como 10.11: 'find/-perm -u + x! -type d -exec file {} \; | grep -v 'para arco' | grep ppc | cut -d: -f1' –