2012-02-09 30 views
1

如何在Linux上編寫bash腳本來確定兩個目錄中的哪些文件具有不同的權限?Bash腳本獲得兩個目錄中文件的權限差異

例如,我有兩個目錄:具有兩個文件

fold1

1- file1 (-rw-rw-r--) 
2- file2 (-rw-rw-r--) 

fold2具有不同的權限相同名稱的文件:

1- file1 (-rwxrwxr-x) 
2- file2 (-rw-rw-r--) 

我需要一個腳本來輸出具有不同權限的文件名, ,因此腳本將只打印file1

我目前通過與顯示文件手動檢查權限:

for i in `find .`; do ls -l $i ls -l ../file2/$i; done 

回答

3

解析find .輸出用:for i in $(find .)將會給你帶來麻煩與空格,換行,或其他完全正常的字符的任意文件名:

$ touch "one file" 
$ for i in `find .` ; do ls -l $i ; done 
total 0 
-rw-r--r-- 1 sarnold sarnold 0 2012-02-08 17:30 one file 
ls: cannot access ./one: No such file or directory 
ls: cannot access file: No such file or directory 
$ 

由於權限可以由所有者或組不同,我想你應該包括那些爲好。如果您需要包括SELinux安全標籤,該stat(1)程序使那麼容易獲得,以及通過%C指令:

for f in * ; do stat -c "%a%g%u" "$f" "../scatman/${f}" | 
    sort | uniq -c | grep -q '^\s*1' && echo "$f" is different ; done 

(您想爲echo命令什麼...)

例:

$ ls -l sarnold/ scatman/ 
sarnold/: 
total 0 
-r--r--r-- 1 sarnold sarnold 0 2012-02-08 18:00 funky file 
-rw-r--r-- 1 sarnold sarnold 0 2012-02-08 18:01 second file 
-rw-r--r-- 1 root root 0 2012-02-08 18:05 third file 

scatman/: 
total 0 
-rw-r--r-- 1 sarnold sarnold 0 2012-02-08 17:30 funky file 
-rw-r--r-- 1 sarnold sarnold 0 2012-02-08 18:01 second file 
-rw-r--r-- 1 sarnold sarnold 0 2012-02-08 18:05 third file 
$ cd sarnold/ 
$ for f in * ; do stat -c "%a%g%u" "$f" "../scatman/${f}" | sort | uniq -c | grep -q '^\s*1' && echo "$f" is different ; done 
funky file is different 
third file is different 
$ 
+0

真的很好的解釋。 +1 – 2012-02-09 07:19:32