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非標準謂詞,您可以使用它來代替,但我不會稱之為「更有效」。

相關內容