在Cocoa中,我將如何測試一個文件是否是可執行的二進制文件?不幸的是,對於腳本和目錄,[NSFileManager isExecutableFileAtPath:]也將返回true,幾乎任何文件的可執行位設置不是我想要的。可可或Bash:測試一個文件是否是一個可執行的二進制文件
雖然直接使用可可是我的首選方法,但是我可以輕鬆地將其包裝在NSTask中的Bash解決方案就足夠了。
在Cocoa中,我將如何測試一個文件是否是可執行的二進制文件?不幸的是,對於腳本和目錄,[NSFileManager isExecutableFileAtPath:]也將返回true,幾乎任何文件的可執行位設置不是我想要的。可可或Bash:測試一個文件是否是一個可執行的二進制文件
雖然直接使用可可是我的首選方法,但是我可以輕鬆地將其包裝在NSTask中的Bash解決方案就足夠了。
我不知道可可,但是這是一個bash的解決方案:
find ../ -type f -perm +111 | \
xargs -n 1 -I {} file "{}" | grep -v text | cut -d: -f1
目錄就可以過濾掉容易的代碼,但知道什麼是二進制的,什麼是不是有點困難,因爲,有效地,唯一的辦法是打開文件並閱讀它,這是你自己需要做的事情。
但是,主要的問題是應該被視爲二進制。
我看到可執行文件在開頭有十幾行文本(因此,它們實際上是腳本),但其餘的文件都是二進制文件。你會如何對它們進行分類?
如果您可以根據加載方式對它們進行分類,您可以嘗試命令file
,它會盡可能精確地告訴您文件是什麼。
當我們在這些目錄結構中編譯我們正在測試的二進制文件時,我們並沒有做任何事情。我們正在尋找使用gcc或clang從C或Objective-C編譯的任何東西。 – Anonymous 2012-08-10 17:56:37
增加了使用文件(命令行工具)來獲取類型的建議。它應該像這樣報告Mach-O可執行文件。 – 2012-08-10 17:58:58
find:-executable:unknown primary or operator – Anonymous 2012-08-10 17:53:10
請記住,這是OS X,而不是Linux。 – Anonymous 2012-08-10 17:53:36
find:-perm:/ 111:非法模式字符串 – Anonymous 2012-08-10 18:12:14