2016-12-02 2 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-]'. Я предпочел реализовать это последнее условие более безопасно, указав необходимый символ и char «r» в позиции 1,4,7. Подробнее Условие [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.

Смежные вопросы