2011-08-05 2 views
5

-print0을 사용하여 find의 출력을 수정하여 줄 바꿈 대신 NULL 종결자를 사용하려고합니다. 그러나 find-o (OR) 함수를 사용할 때이 작업을 수행 할 수 없습니다.find에서 -o와 -print0을 함께 사용

이 잘 작동

, 그것은 두 그룹 모두 'www가 데이터'가 소유 한 사용자 '피터'가 소유 여부되지 않은 파일의 개행 문자로 구분 된 목록 출력합니다 :

find . ! -user pieter -o ! -group www-data 

을하지만 추가 할 때 -print0이에 더 이상 어떠한 출력을 얻을 :

find . ! -user pieter -o ! -group www-data -print0 

을이 그러나 잘 작동 :

find . ! -user pieter -print0 

내가 무엇을 해요입니다 발급? 여러 개의 괄호 배치를 추가하려고 시도했지만 아무 소용이 없습니다.

+0

나는 이것이 작동 할 것이라고 추측하지만, 테스트되지 않았다 :'find. \ (! -user pieter -o! -group www-data \) -print0' –

답변

7

괄호가 없습니다. 당신이 쉘을 전달합니다, 그래서 그들을 탈출해야합니다 : 당신은 특히 예 섹션에서 on its man page을 찾을 수에 대한 자세한 내용을 찾을 수 있습니다

find . \(! -user pieter -o ! -group www-data \) -print0 

.

이유가 궁금한 경우는 order of operations입니다. find의 모든 표현식은 true 또는 false를 반환합니다. 수식 사이에 명시 연산자 (-a, -o 또는 ,)를 넣지 않으면 -a으로 간주됩니다.

그래서, 원래 명령은 사용자 pieter가 소유 한 파일에 print0을 평가하지만 그룹 www-data 것이다, find . ! -user pieter -o ! -group www-data -a -print0에 해당합니다.

+0

멋지다! 이 작동합니다. 이제 조건을 함께 그룹화하여 솔루션을 살펴 봅니다. – pfrenssen