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

관련 정보