2016-11-23 1 views
0

У меня проблема с командой grep. У меня есть 3 задачи:Как я могу grep фильтровать результаты из ls?

а) найти и показать только реж для "Ls -l"

ls -l | grep ^d # which works good 

б) только файлы, имена которых начинаются с цифры

ls | grep ^[0-9] 

тоже работает, но для файлов и dirs, он должен работать только для файлов, как я могу это сделать?

с) файлы, которые имеют «Х» право групп

ls -l | grep "^-*x" # it shows every file 

Как я могу сделать эти команды для б) и в) работает?

+5

Разбор 'ls' - плохая идея для этого. Используйте команду 'find'. – anubhava

+4

... см. [Почему вы не должны анализировать вывод 'ls'] (http://mywiki.wooledge.org/ParsingLs) на Wooledge wiki и [UseFind] (http: //mywiki.wooledge. орг/UsingFind). –

ответ

1

а) найти и показать только реж для «Ls -l»

find . -maxdepth 1 -mindepth 1 -type d -exec ls -l {} \; 

б) только файлы, имена которых начинаются с цифры

find . -maxdepth 1 -type f -name "[0-9]*" 

с) файлы, которые имеют «х» право для групп

find . -maxdepth 1 -type f -perm /g+x 
+1

Хех. Я только сам ответил на это, потому что я был обеспокоен тем, что будут другие ответы, которые пытались взять буквальный подход. Видимо, я не должен волноваться. Тем не менее, поскольку в настоящее время он реализован с помощью '-regex', (b), он необязательно несовместим (требуется расширение GNU для' find') и будет соответствовать любому файлу, если он находится в каталоге, который начинается с цифры. –

+1

@CharlesDuffy обновил ответ :) – ritesht93

+0

Если вы добавите действие '-ls', вы получите тот же результат, что и' ls -l'. –