ابحث عن جميع مكتبات PPC والثنائيات والتطبيقات في Snow Leopard

StackOverflow https://stackoverflow.com/questions/1406456

  •  05-07-2019
  •  | 
  •  

سؤال

هل لديك أي مؤشر حول كيفية كتابة برنامج نصي يبحث عن نظامي عن التطبيقات والمكتبات (أي/usr/local/lib و/usr/local) ، والثنائيات التي هي PPC فقط؟

قمت بترقية نظامي من جهاز Mac PPC إلى Intel Mac الذي يعمل Leopard 10.5. ثم قمت بالترقية إلى Snow Leopard 10.6 التي لا تأتي مع Rosetta. لذلك أنا الآن أدرك الآن جميع الأشياء القديمة التي تتبقى على نظامي!

هل كانت مفيدة؟

المحلول

ال 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 ، الأول يحتوي على قائمة بملفات 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 قابلة للتنفيذ. أود أن أقترح التحقق من القائمة قبل أي شيء.

بعض الملاحظات:

يتم كل ما سبق في المحطة.

هذا مجرد اختراق. لقد نجح الأمر بشكل جيد على نظامي وأنا سعيد لأنك سألت لأنني أردت أن أعرف نفس الشيء. لكنها مجرد اختراق.

نصائح أخرى

للعثور على التطبيقات ، يمكنك استخدام System Profiler (تسمى معلومات النظام في Lion).

انظر إلى "البرامج" في الشريط الجانبي واختر "التطبيقات" ... ثم انتظر لفترة طويلة بينما تجمع المعلومات.

استنادًا إلى إجابة كيفن بالارد ، يعمل هذا في 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

لاحظ أيضًا أن Rosetta تأتي مع 10.6 - إنها مجرد واحدة من التثبيتات الاختيارية. تحقق من قرص DVD الذي استخدمته لتثبيته.

في الواقع ، يجب أن يطلب منك تثبيته عند محاولة إطلاق أحد هذه التطبيقات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top