• ベストアンサー

findコマンドの場合だけなぜ末尾に{}や\;が必要なのか?

なぜ findのexecの場合だけファイル名を表す{}や、コマンドの終了を表す\;が必要になるのでしょうか? 他のコマンドはわざわざ終了を明示的に示していないのにfindだけこのような記述をするのが不思議です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#208124
noname#208124
回答No.1

「他のコマンドを実行する」ためにfind自身への引数なのか他コマンドへの引数なのかを区別する必要があるために\;が必要で、 ファイル名を引数のどこに置くのかを指定するために{}が必要だからです find ~ -exec hoge -xxx \; この場合FileAが見つかったとしてFileAは引数のどこにおいてhogeを実行すべきですか? hoge -xxx FileA ですか hoge FileA -xxx ですか? find ~ -exec hoge {} -printf %p -printf %p はfindのオプションとして解釈すべきですか、それともhogeの引数として渡すべきですか?それとも両方?

その他の回答 (2)

  • shred
  • ベストアンサー率35% (25/70)
回答No.3

いっぺん簡単なインタープリタでも書いてみると良い。 頭でわからなければ手を動かす。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

他のコマンドとは例えば何ですか?「find の exec の場合だけ」とお書きですが、find 以外で exec 相当の機能を持つコマンドのことですよね? 例えば xargs ではファイル名の指定に(デフォルトでは)findと同じく {} を使います。子供のコマンドは最後に一つしか書けないので ';' は必要ないですが。 ・オペランド(ファイル名等)を指定するためには何らかの置き換え文字が必要 ・子供のコマンドを最後以外に複数個書けるためには終わりの目印が必要 まあ、xargsと同じように、「置き換え文字{}を書かないときは子供のコマンド末尾にファイル名を付ける」という機能が合っても良かったかもしれません。現在はそうなっていませんが、そうなっていない理由は特にないと思います。

関連するQ&A