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

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

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

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

我正在尋找與 Ubuntu、Debian、基於 RHEL 等的兼容性,因此我不會使用任何特定語言來標記它。我希望在 Bash 中這樣做,但如果您有 ZSH 腳本,那也可以。

答案1

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

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)

答案2

簡單的答案:

chmod -R a+rX .

+X(注意大寫的X)表示如果某個使用者已經存在執行權限,則授予執行權限。如果您的目錄樹具有所有者的正確權限,並且您希望每個人都可以存取它,那麼這是正確的命令。它不僅使目錄可以全域執行,還可以使檔案成為可執行檔。

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

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

如果您不想使任何檔案可執行,則必須使用 zsh 兩行程式碼:

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

相關內容