find 정규 표현식에 관해....
글쓴이: myjuliet / 작성시간: 화, 2006/08/15 - 9:31오후
안녕하세요 find 명령어 공부중
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
이런 흔한명령어를 볼수 있는데요 다른건 알겠는데 \( -perm -4000 -o -perm -2000 \)
이부분 \( 내용 \) 괄호가 무슨의미인지 모르겠네요....
괄호 넣고 안넣고 검색해봤는데 괄호를빼고 입력하면 몇게 나오질 않네염.. 흠.... 답변 부탁드립니다..
Forums:
연산자 우선순위
괄호는 연산자 우선순위를 의미합니다. 2+3*4와 (2+3)*4가 서로 다르듯 연산자 때문에 사용된 것 같습니다.
정확히는 제가 잘 모르겠지만
첫번째의 경우 두번째와 같이 해석되기 때문에 -o -perm -2000은 해석되지 않는 것 같습니다. expr1 -o expr2와 같은 표현에서 expr1이 참이면 expr2는 해석되지 않습니다.
괄호를 써서 우선순위를 강제지정해주는 이유는 그 때문 같습니다. (expr1 expr2의 and연산이 -o의 or연산보다 우선합니다.)
하지만.. 그럼 이런예는 어떤가요... ??
서버 운영중에 로그 정리하다가 시간영역별로 추려내기 위해 다음과 같은 명령어를 항상 사용합니다.
find . -newer file -o ! -newer file1 | xargs \rm
다음과 파일 부터 파일1에 있는 사이에 있는 모든 파일을 삭제하곤 하는데요 이땐 괄호를 사요하지 않아도
지금까지 쭉 잘 사용하였습니다. ! 부정의 의미가 있어서 틀린건가요..? 무지한 저의 지식을 ㅠ ㅠ;;
명후니~
man find 하셔서 OPERATORS
man find 하셔서 OPERATORS 부분을 보시면 !의 우선순위는 () 바로 다음인 것을 보실 수 있습니다. 연산자 !가 -o 보다 우선하므로 문제가 없습니다.
이제 조금 알것같네요 ^^
친절하신 답변 감사드립니다 ^^*\
아 그런데 \( \) 에서 \ 는 무슨역할을 하는지.. 퍽 (ㅠㅠ)
명후니~
Shell 처리
tar cf - * .??* | ( cd /target; tar xfp -)
위와 같은 명령의 경우처럼 프로그램의 출력을 다른 프로그램의 입력으로 사용하고 싶지만 그 사이 다른 조작을 하고 싶을 때 괄호문자를 사용하여 셸에게 적절한 처리를 명령합니다. (정확히 무슨 처리인지는 제가 셸에 대해 잘 몰라서 모르겠습니다.)
그런데 예를 들어주신 find 명령의 경우는 이와 같은 처리가 필요한 상황이 아니므로, 오해(?)를 막으려면 백슬래시를 써서 셸이 괄호를 무시하도록 해야합니다. find한테 괄호문자를 확실히 전달해주려면요.
find . -type f -name foo -exec rm {} \;
위와 같은 명령에서도 ; 문자가 원래 셸의 구문의 일부이기에 백슬래시를 써서 셸이 세미콜론을 무시하도록 해야합니다.
설명은 정말 잘해주셨는데...
이몸의 워낙 지식이 없어서.. 이해가 안가네요 ㅠㅠ
조금더 공부한후 다시 되새김질하며 읽어 보겠습니다.
답변 감사해요 ^^* 꾸벅 (__*)
명후니~
좀 더 쉽게 말하자면,
좀 더 쉽게 말하자면, ()를 셸이 가로채는 것을 막기 위해 \를 쓰는 것입니다.
모두 실행해보시면 조금 감이 잡히실 것입니다.
댓글 달기