
Si hago esto find
:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK"
entonces obtengo lo que espero en 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
...
Si agrego una -exec
cláusula para vincular los archivos encontrados:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" -exec ln -s {} ${TRIADS_GROUP} \;
entonces solo vincula los BRIK:
stats.tp101_day1+tlrc.BRIK@
stats.tp101_day2+tlrc.BRIK@
...
Preguntas
- ¿Lo que está sucediendo?
¿Existe una forma más eficaz de indicarle a find que devuelva .HEAD y .BRIK utilizando una única expresión comodín? Probé cosas como:
find ${TRIADS_DIR}/*.dc.results -path "*amblock/stats.*{HEAD,BRIK}"
pero no pude hacerlo funcionar.
Respuesta1
Pregunta 1: ¿Qué está pasando?
Estás -o
dividiendo tus argumentos. El -exec
único se ejecuta si el material en el mismo lado -o
tiene éxito (el -path "*amblock/stats.*BRIK"
). Si desea -exec
ejecutar ambas condiciones, debe colocarlas entre paréntesis:
find ${TRIADS_DIR}/*.dc.results \( -path "*amblock/stats.*HEAD" -o -path "*amblock/stats.*BRIK" \) -exec ln -s {} ${TRIADS_GROUP} \;
Pregunta 2: ¿Existe una forma más eficaz de indicarle a find que devuelva .HEAD y .BRIK utilizando una única expresión comodín?
No, más o menos. Algunas find
implementaciones tienen un -regex
predicado no estándar que podría usar en su lugar, pero yo no lo llamaría "más eficiente".