2014-04-20 2 views
1

find 명령에서 제외 경로를 지정하기 위해 변수를 사용하려고합니다.변수를 사용하여`find`에서 제외시킬 경로를 어떻게 지정합니까?

x="*test/.util/*" 
y="*test/sh/*" 

find test -type f -name "*.sh" -not -path "$x" -not -path "$y" 

하지만 같이 변수로 -not -path를 이동하고 싶습니다 :

이 조각 작품 나는 또한 변수의 경로에 따옴표를 추가하는 시도

x="-not -path *test/.util/*" 
y="-not -path *test/sh/*" 

# error: find: -not -path *test/.util/*: unknown primary or operator 
find test -type f -name "*.sh" "$x" "$y" 

# Tried removing quotes 
# error: find: test/.util/foo.sh: unknown primary or operator 
find test -type f -name "*.sh" $x $y 

하지만, 그 결과 경로 필터링이 발생하지 않습니다.

# no syntax error but does not exclude the paths 
x="-not -path '*test/.util/*'" 
y="-not -path '*test/sh/*'" 

저는 OSX Mavericks를 사용하고 있습니다. GNU bash 버전 3.2.51 (1) -release (x86_64-apple-darwin13).

내가 뭘 잘못하고 있니? 감사합니다

+0

@ chepner의 대답은 전적으로 정확하고 정확한 것입니다. 또한 BashFAQ # 50 : http://mywiki.wooledge.org/BashFAQ/050 –

답변

5

find은 하나의 인수로, 그것이 필요로하는 3 개의 별도의 인수가 아니라 -not -path *test/.util/*을 수신 중입니다. 대신 배열을 사용할 수 있습니다. 인용하면

x=(-not -path "*test/.util/*") 
y=(-not -path "*test/sh/*") 

find test -type f -name "*.sh" "${x[@]}" "${y[@]}" 

${x[@]}는 별도의 일련의 단어로 확장 어레이 소자 당 하나의 각 단어는 적절히 인용 남아 있으므로 의도 한대로 패턴 find에 그대로 전달된다.

+0

이 표시 될 수도 있습니다. 감사합니다. – user46874