2016-12-02 98 views
1

我需要打印$ d所有用户都有阅读权限的子目录...所以我以ls -l $dir开头,然后我试图继续如下操作:ls -l $dir | grep "-r*"但它不承认第一个命令的输出作为grep的输入

回答

1

您可以使用-P标志,并提供一个Perl的正则表达式:

ls -l $dir | grep -P "^-r" 

这将列出所有以“-r开头的所有文件“,这是你想要的。

+0

不错!但我知道注意到它打印$ dir下的所有文件,我只想要所有的子目录......我应该如何打印只有子目录? –

+0

@UFCInsider你可以用'ls -l $ dir/*'代替。 – Maroun

+0

我必须以'ls -l $ dir |' –

0
find "$dir" -type d -perm -o+r 

的讨论来看,到目前为止,你在做什么是目前最有可能得到你的目录可读他们业主

0

如果你想要所有的子目录,你应该使用ls -lR $dir,那么你必须过滤grep | grep '^dr[w-][x-]r[w-][x-]r[w-][x-]',我更喜欢实现这个最后的条件更安全,在1,4,7位置指定所需的字符和字符“r”。 详细条件[list]意味着您可以用仅指定给列表中的一个字符替换它。有不同的方式来声明字符的列表:

[abc] // you can replace with one between a or b or c. 
[1-7] // you can replace with one char between 1 2 3 4 5 6 or 7. 
[c-f] // you can replace with one c d e or f.  
[[:digit:]] // you can replace with one numeric char. 
[[:upper:]] // you can replace with one uppercase char. 
[[:lower:]] // you can replace with one lowercase char. 

只有目录和子目录:

ls -lR $dir | grep '^dr[w-][x-]r[w-][x-]r[w-][x-]' 

目录,子目录和文件:

ls -lR $dir | grep '^-r[w-][x-]r[w-][x-]r[w-][x-]' 

我没有找到-P什么将其标记为man grep

相关问题