
これをやると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
代わりに使用できる非標準の述語がありますが、それを「より効率的」と呼ぶことはできません。