私がこれを行うと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