2016-11-23 2 views
0

grep 명령에 문제가 있습니다. 나는 3 개 작업이 있습니다ls의 결과를 필터링하려면 어떻게 grep합니까?

가) 찾아

ls | grep ^[0-9] 

도 있지만 작동 "LS -l"

ls -l | grep ^d # which works good 

b)는 단지 파일 이름은 숫자로 시작하는 경우에만 디렉토리의 표시 파일 및 디렉토리의 경우 파일에 대해서만 작동해야합니다. 어떻게해야합니까?

c) 상기 나는 나에 대해이 명령을 할 수있는 방법 그룹

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

에 대한 권리) "X"및 c) 작업 한 파일?

+5

'ls'을 구문 분석하는 것은 좋지 않습니다. 'find' 명령을 사용하십시오. – anubhava

+4

... Wooledge 위키에서 [ls'의 출력을 분석하면 안되는 이유] (http://mywiki.wooledge.org/ParsingLs)와 [UsingFind] (http : //mywiki.wooledge. org/UsingFind). –

답변

1

가) 찾아 "LS -l"

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

b)는 단지 파일 이름은 숫자

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

c) 상기 'x'를 가진 파일로 시작하는 경우에만 디렉토리의 표시 그룹을위한 권리

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

ㅎㅎ. 나는 문자 적 ​​접근법을 취하려는 다른 해답이 있을까 봐 걱정했기 때문에 나는 스스로에게만 대답했다. 분명히 나는 ​​걱정할 필요가 없다. 즉,'-regex'로 현재 구현되어있는 것처럼, (b)는 불필요하게 호환되지 않으며 ('find'에 대한 GNU 확장이 필요합니다), 숫자로 시작하는 디렉토리에 있으면 모든 파일을 일치시킵니다. –

+1

@CharlesDuffy 님이 답변을 업데이트했습니다 : – ritesht93

+0

'-ls' 액션을 추가하면'ls -l'과 같은 결과가 나옵니다. –

관련 문제