2013-02-06 58 views
4

這是如果我第一次嘗試bash腳本。我試圖創建一個腳本來檢查每個文件的所有者和組在特定目錄下開始。遞歸檢查所有文件的所有權

例如,如果我有這樣的:

files=/* 
for f in $files; do 
    owner=$(stat -c %U $f) 
    if [ "$owner" != "someone" ]; then 
     echo $f $owner 
    fi 
done 

的最終目標是解決權限問題。但是,我無法獲得/*變量,在/中的所有內容下,它只會檢查/下的文件並停止在任何新目錄中。任何關於如何檢查/及其子目錄下所有內容的權限的指針?

+1

嗨!這個工作要遞歸嗎? – hek2mgl

回答

3

你可以試試這個,這是一個遞歸的一個:

function playFiles { 
    files=$1 
    for f in $files; do 
      if [ ! -d $f ]; then 
        owner=$(stat -c %U $f) 
        echo "Simple FILE=$f -- OWNER=$owner" 
        if [ "$owner" != "root" ]; then 
          echo $f $owner 
        fi 
      else 
        playFiles "$f/*" 
      fi 
    done 
} 
playFiles "/root/*" 

在將playFiles「/ root/」替換爲:playFiles「/」之前,在另一個目錄中播放一下。順便說一句playFiles是一個bash函數。希望這會幫助你。

+0

非常感謝各位,我更喜歡這個功能,而且工作得很好。 – user2045112

+0

對於unix用戶,將所有者行更改爲'owner = $(stat -f%Su $ f)' – anonymous

22

可以shopt -s globstar並使用for f in yourdir/**在bash4遞歸擴展+,或者您可以使用find

find yourdir ! -user someone 

如果你想用的用戶名和文件名相同的輸出格式,你必須得到具體系統:

GNU$ find yourdir ! -user someone -printf '%p %u\n' 
OSX$ find yourdir ! -user someone -exec stat -f '%N %Su' {} + 
+1

這實際上是最好的答案。對於osx用戶,'brew安裝findutils'並且無痛地使用'gfind'。 – anonymous

2

遞歸列出所有文件以列表格式和隱藏文件,顯示的所有權和權限

ls -Rla *