如果我这样做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
非标准谓词,您可以使用它来代替,但我不会称其为“更有效”。