2013-09-22 55 views
1

在bash shell中,我如何输出所有用户可读的文件(即用户,组和其他人)。Bash文件或目录是否可读?

我试过find -readable,但它输出的是那些至少有一个用户可读的。 有什么想法?

回答

3

有很多因素可能会影响用户如何阅读文件,但基本上可以在others组中搜索带有+ r属性的文件。这是一个办法做到这一点使用find

find -perm -o=r 

这将包括文件和目录。具体到文件,加上`型f``:

find -perm -o=r -type f 

而且它可能一样-0004:如果您使用

for i in *; do 
    [[ $(stat -c %A "$i") =~ (-rw.rw.rw.|drwxrwxrwx) ]] && echo "$i" 
done 

find -perm -0004 -type f 
+0

谢谢,另外,我想以长格式输出文件,除了当我将find -perm ...命令行输入到ls -l命令时,它仍然显示那些其他组不可读的文件。不确定为什么 – hahahaha

+0

'ls'不能从输入读取目标参数。如果您喜欢,您可以先将输出存储在变量中,然后将其传递给“ls”。 'readarray -t f <(find -perm -o = r -type f); ls -l“$ {f [@]}”'。请注意,您应该运行bash 4.0+以使其正常工作。 – konsolebox

+0

我忘了你也可以使用'xargs':'find -perm -o = r -print0 | xargs -0 ls -l'。或者使用'find''s exec:'find -perm -o = r -exec ls -l'{}''+'' – konsolebox

0

试试这个,你可以递归地做到这一点:

shopt -s globstar 
for i in **; do 
... 
+0

整洁! '$(stat -c“%a”)&666' –

+0

OP如何在问题中使用'find'作为示例,这意味着他/她想要递归解决方案。 (当然,假设bash 4你可以在这里使用globstar。) – kojiro

相关问题