Bash脚本获取两个目录中文件的权限差异

时间:2012-02-09 01:24:39

标签: bash shell scripting

如何在Linux上编写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

1 个答案:

答案 0 :(得分: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
$