Bash

用於遞歸遍歷目錄並根據文件類型條件進行 chmodding 的 Shell 腳本

  • June 17, 2012

任何人都可以向我指出程式碼或編寫shell腳本的教程,該腳本可以遞歸地遍歷整個目錄結構(從目前工作目錄開始,或者給出從哪裡開始的必需參數)並且可以:

  1. 確定一個項目是否是一個目錄,如果是,chmod 755它,或者…
  2. 確定一個項目是否是一個文件(不是一個目錄),以及chmod 644它。

我正在尋找與 Ubuntu、Debian、基於 RHEL 等的兼容性,所以我沒有用任何特定語言標記它。我想在 Bash 中這樣做,但如果你有一個 ZSH 腳本,那也可以。

我習慣了這個單行命令(將從目前工作目錄開始遞歸)

find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +

解釋:

find .                    # starting in curdir find   
-type d                   # any directory
-exec chmod 0755 '{}'     # and chmod it to 755
+                         # (variant of -exec look find man page)
-or                       # or
-type f                   # any file
-exec chmod 0644 '{}'     # and chmod it to 644
+                         # (as above)

簡單的答案:

chmod -R a+rX .

+X(注意大寫 X)表示如果某些使用者已經存在執行權限,則授予執行權限。如果您有一個目錄樹,它對所有者俱有正確的權限,並且您想讓每個人都可以訪問它,那麼這是使用正確的命令。它不僅使目錄成為世界執行檔,而且使文件成為執行檔。

如果您還想將寫入權限重置為僅所有者並清除任何 setuid/setgid 位,請執行此操作

chmod -R a-ws,u+w,a+rX .

如果您不想使任何文件可執行,則必須使用 zsh 兩行:

chmod 755 **/*(/)
chmod 644 **/*(.)

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