2012-11-08 45 views
1

我有這個命令保存在這個變量:如何檢查許可給定文件的父文件夾在bash

filelist=$(find $dir_name -size $sizeFileTmp -printf '%M %n %u %g %-s %Tb %Td %Tk:%TM %P\n') 
echo "$filelist" | sort -rnk5 | awk '{printf "%s %s %s %s %6s %3s %2s %5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9}' 

產生這樣的輸出:

-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir2/testdir2/subdir2/phones 
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir2/testdir2/phones 
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/testdir1/subdir1/phones 
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/testdir1/phones 
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/.phones 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir2/vimtutor 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir2/testdir2/vimtutor 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir2/testdir2/subdir2/vimtutor 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir1/vimtutor 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir1/testdir1/vimtutor 
-rwx------ 1 juanpa juanpa 26615 Nov 04 20:47 sample.dir1/testdir1/subdir1/vimtutor 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir2/testdir2/subdir2/cdlist 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir2/testdir2/cdlist 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir2/cdlist 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir1/testdir1/subdir1/cdlist 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir1/testdir1/cdlist 
-rwx------ 1 juanpa juanpa 25557 Nov 04 20:47 sample.dir1/cdlist 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir2/testdir2/subdir2/sample.txt 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir2/testdir2/sample.txt 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir2/sample.txt 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir1/testdir1/subdir1/sample.txt 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir1/testdir1/sample.txt 
-rwx------ 1 juanpa juanpa 20558 Nov 04 20:47 sample.dir1/sample.txt 

我的問題是應該如何我檢查包含這些文件的文件夾是否沒有寫入和執行權限,然後突出顯示這些行?

在此先感謝

+0

請說明你認爲是「最後一個文件夾」。 – kbulgrien

+0

感謝您對我的問題發表評論,現在好多了嗎? –

+0

取決於你的需要,如果它只是一個快速檢查,'echo「$ {filelist}」| grep -v'^ .rx''會顯示至少不是'-r-x ------'的文件。祝你好運。 – shellter

回答

1

以下命令可以識別目錄下的$沒有讀/寫權限目錄,但不限制報告那些可能已經被排除在-size謂詞使用生成列表文件夾:

find $dir -type d ! \(-readable -a -writable \) -printf '%p\n' 

以下看起來相當複雜,但它預先「!」以突出顯示沒有用戶可讀/可寫目錄的項目(儘管如果文件夾的讀取權限不存在,可能會問如何得到文件列表)。

filelist=$(find $dir_name -size $sizeFileTmp -printf '%M %n %u %g %-s %Tb %Td %Tk:%TM %P\n') 
if [ -z "${filelist}" ]; 
then 
    echo "No files." 
else 
    echo "$filelist" | \ 
    sort -rnk5 | \ 
    awk \ 
    '{ DIR = gensub(/[/][^/]*$/, "", "", $9); 
     CMD = "stat -c +%A " DIR; 
     CMD | getline PERMS; 
     if (PERMS !~ /^..rw/) 
     { 
     printf("!"); 
     } 
     printf("%s %s %s %s %6s %3s %2s %5s %s\n", \ 
     $1, $2, $3, $4, $5, $6, $7, $8, $9); 
    }' - 
fi 

這不檢查目錄的每個級別,但只檢查葉文件夾。

感謝F. Hauri的想法使用stat

+0

感謝kbulgrien您的答案,但有一個錯誤,我不知道如何解決它 這裏是輸出[鏈接](http:// dl.dropbox.com/u/38105514/output.txt) –

+0

我在這裏對腳本進行了相當徹底的測試,實際上它檢測到沒有寫權限的目錄,儘管如我所說,人們很難指望它檢測沒有讀權限的文件夾因爲您提供的查找無法找到沒有讀取權限的文件夾中的文件。我無法訪問您的鏈接,因爲它在此網絡上被阻止。 – kbulgrien

+0

我剛剛複製粘貼腳本從這個職位,並重新測試。它確實有效,但添加了一個檢查以確保實際上有文件需要處理,因爲它僅輸出!如果沒有設置dir或sizeFileTmp。 – kbulgrien

相關問題