如何在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
答案 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
$