find -exec는 find 출력에서 ​​제안한 작업을 수행하지 않습니다.

find -exec는 find 출력에서 ​​제안한 작업을 수행하지 않습니다.

내가 이렇게 하면 find:

find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK"

그런 다음 STDOUT에서 기대하는 결과를 얻습니다.

tp101.day1.dc.results/amblock/stats.tp101_day1+tlrc.HEAD
tp101.day1.dc.results/amblock/stats.tp101_day1+tlrc.BRIK
tp101.day2.dc.results/amblock/stats.tp101_day2+tlrc.HEAD
tp101.day2.dc.results/amblock/stats.tp101_day2+tlrc.BRIK
...

-exec찾은 파일을 연결하는 절을 추가하면 다음과 같습니다 .

find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" -exec ln -s {} ${TRIADS_GROUP} \;

그런 다음 BRIK만 연결합니다.

stats.tp101_day1+tlrc.BRIK@
stats.tp101_day2+tlrc.BRIK@
...

질문

  • 무슨 일이에요?
  • 단일 와일드카드 표현식을 사용하여 find가 .HEAD 및 .BRIK를 반환하도록 지시하는 더 효율적인 방법이 있습니까? 나는 비슷한 것을 시도했습니다 :

    find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*{HEAD,BRIK}"
    

    하지만 제대로 작동하지 못했습니다.

답변1

질문 1: 무슨 일이 일어났나요?

당신은 -o당신의 주장을 분열시키고 있습니다. -exec같은 쪽의 콘텐츠가 -o성공한 경우 에만 실행됩니다( -path "*amblock/stats.*BRIK"). 두 조건 모두에서 실행 하려면 -exec해당 조건을 괄호로 묶어야 합니다.

find ${TRIADS_DIR}/*.dc.results \( -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" \) -exec ln -s {} ${TRIADS_GROUP} \;

 

질문 2: 단일 와일드카드 표현식을 사용하여 find가 .HEAD 및 .BRIK를 반환하도록 지시하는 더 효율적인 방법이 있습니까?

아니, 일종의. 일부 구현에는 대신 사용할 수 있는 비표준 조건자가 find있지만 이를 "더 효율적"이라고 부르지는 않습니다.-regex

관련 정보