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