find -execはfind出力で提案された操作を実行しません。

find -execはfind出力で提案された操作を実行しません。

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

関連情報