2014-10-08 21 views
0

我需要編寫shell腳本來檢查所有者和組是否與我在IF語句中使用的名稱相匹配。它需要遞歸檢查所有文件和文件夾,包括父文件夾。檢查文件和子文件夾中的所有者/組匹配

例如,我的目錄結構看起來像這樣

/data 
/data/folder1 
/data/folder1/fileA 
/data/folder2/fileB 

我需要驗證數據,文件夾1,文件夾2,的fileA,FILEB都是由相同的所有者和組所有。

#!/bin/bash 

DIR="/data"; 
N=0; 

for $DIR.. 
    if [ NOT MATCH "username:groupname" ]; then 
    N=1; 
    fi 
done 

if [ $N -gt 0 ]; then 
    echo "all or some files and folders don't match"; 
else 
    echo "all files match"; 
fi 
+0

什麼是'不匹配'? – jgr208 2014-10-08 16:03:55

+0

和你必須使用遞歸? – jgr208 2014-10-08 16:05:00

+0

是的,遞歸是必需的,但是它只有1或2個目錄很深並且包含不超過50個文件,所以它應該是一個相當快的過程。 – Mark 2014-10-08 16:05:59

回答

0
#!/bin/bash 
OWNER=user 
ACTUAL_OWNER='stat -c %U file' 
N=0; 

    not_match(files) 
    { 
     if [ ! OWNER = ACTUAL_OWNER ]; then 
     N=1; 
     return; 
     else if [ not_end_of_file ]; then 
     not_match(files+1) 
     else 
     return 
     fi 
    } 

    DIR="/data"; 
    not_match(files) 
    if [ $N -gt 0 ]; then 
     echo "all or some files and folders don't match"; 
    else 
     echo "all files match"; 
    fi 

我不是肯定的某些確切的命令或語法,因此它具有一定的須藤代碼,但它基本上是你想要做什麼。如果他們是匹配,而不是你正在搜索的文件的結尾再次調用該函數,並增加到下一個文件,如果它不匹配,說他們不要,只是返回,因爲你不告訴用戶有多少不匹配,如果結束達到成功然後返回打印出來給用戶

+0

明天我會試試這個。謝謝! – Mark 2014-10-08 21:27:14

相關問題