Chmod

如何使除少數文件類型之外的所有文件都可執行?

  • October 4, 2012

我有一個文件夾,其中包含許多 C 源文件和相同數量的編譯輸出文件。

我為所有這些文件設置了可執行位,但由於某種原因它失去了,使它們無法執行。(我認為那是因為我將那個文件夾移到了 NTFS 分區一段時間)

我想讓它們(但不是我目錄中的其他文件)再次可執行。一種可能的方法是將所有源文件從該文件夾移動到臨時文件夾並執行以下操作:

chmod +x *

然後將源文件移回目前文件夾。

是否可以在不移動文件的情況下做同樣的事情?

筆記:

編譯的輸出文件是無副檔名的*(在 C 中)*。

這取決於您如何定義應將哪些文件設置為執行檔。例如,如果考慮所有文件名中沒有點的文件,您可以使用:

find -type f -not -name "*.*" -exec chmod +x \{\} \;

這將遞歸查找文件名中沒有點的所有文件(不是目錄)並將它們設置為執行檔。如果要將其限制為僅目前目錄,請添加-maxdepth 1參數,如下所示:

find -maxdepth 1 -type f -not -name "*.*" -exec chmod +x \{\} \;

您還可以依靠file可以告訴您文件是否是 ELF 執行檔的命令。為此,您可以執行以下命令:

find -type f -exec /bin/sh -c "file {} | grep -q executable && chmod +x {}" \;

這將遞歸地查找所有正常文件並file對其呼叫命令。然後,grep 將在此命令的輸出中查找“可執行”字元串(它應該類似於ELF 32-bit LSB executable ...),並且只有找到它,chmod才會在此文件上呼叫。

當然,您也可以-maxdepth 1在這種情況下添加禁用遞歸搜尋。

引用自:https://unix.stackexchange.com/questions/49884