
Se eu fizer isso find
:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK"
então consigo o que espero em 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
...
Se eu adicionar uma -exec
cláusula para vincular os arquivos encontrados:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" -exec ln -s {} ${TRIADS_GROUP} \;
então apenas liga os BRIKs:
stats.tp101_day1+tlrc.BRIK@
stats.tp101_day2+tlrc.BRIK@
...
Questões
- O que está acontecendo?
Existe uma maneira mais eficiente de dizer ao find para retornar .HEAD e .BRIK usando uma única expressão curinga? Eu tentei coisas como:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*{HEAD,BRIK}"
mas não consegui fazê-lo funcionar.
Responder1
Pergunta 1: O que está acontecendo?
Você -o
está dividindo seus argumentos. O -exec
só é executado se o material do mesmo lado for -o
bem-sucedido (o -path "*amblock/stats.*BRIK"
). Se quiser -exec
executar em ambas as condições, você precisa colocá-las entre parênteses:
find ${TRIADS_DIR}/*.dc.results \( -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" \) -exec ln -s {} ${TRIADS_GROUP} \;
Pergunta 2: Existe uma maneira mais eficiente de dizer ao find para retornar .HEAD e .BRIK usando uma única expressão curinga?
Não, mais ou menos. Algumas find
implementações têm um -regex
predicado não padrão que você poderia usar, mas eu não chamaria isso de "mais eficiente".