find -n dirファイルの代わりにdir -nameファイルを見つけるのはなぜですか?

find -n dirファイルの代わりにdir -nameファイルを見つけるのはなぜですか?

私はこれを見回しましたが、それについて何も見つかりません。

いつも気になりました。他のほとんどの組み込みbashコマンドに-flag arg1 arg2コマンド形式(cp -r dir1 / dir2 /など)があるのはなぜですか?ただし、ここで find コマンドは、何らかの方法で 2 つの引数の間にフラグを入れます。 ?

find path/ -name pattern

これは私にとって一貫性がなく、覚えにくいです。妥当な理由はありますか?私が知らないどんなコンベンションがありますか?

答え1

コマンドが最初に表示され、一貫性が後で追加されます。

最初に見つけることができるマンページは次のとおりです。

find パス名式

find1970年代から、順序と構文(オプションにダッシュが必要かどうか)に関する仮定がさまざまなコマンドに追加されました。〜の後(例:1980年代後半および1990年代初め)ユーザーはさまざまなコマンドの構文を覚えておくのに役立ちます。たとえば、 の場合、find開発者はいくつかの不一致を認識するようになりました。

間違い
デバイスの種類を確認できません。
構文は次のとおりです。もし

したがって、正解は、コマンドが元の開発者にとって意味があり、主な変更が適用されなかったことです。

答え2

いくつかのことを混同しているようです。 Shellも組み込み関数ではfindありません。cpコマンドの唯一のパラメータはパスでfindあり、残りはオプションとその値ですが、これは単なる意味であり、ここでは違いはそれほど重要ではありません。さらに重要なのは、オプションフラグには2つのカテゴリがあることです。主張を受け入れる者と受け入れない者。最も一般的な形式は次のとおりです。

command -flag flagValue

多くのプログラムは単一文字フラグ(command -f)を使用しますが、多くのプログラムは単一文字と長いオプションの両方を使用します(たとえば、ほとんどすべてのGNUツール)。cpこれが有効なコマンドだと言われましたcp

cp -dR --preserve=all -i --dereference foo bar baz/

通常、最も一般的な「標準」形式は実際には次のとおりです。

command -flag1 -flag2 value1 -flag3 value2 ARGUMENTS

つまり、多くのフラグは単純なブール値ではなく、値を持つこともできます。検索も例外ではありません。cp引用したフラグの場合も同様です。

cp -t /foo -u file1 file2 fileN

したがって、ほとんどのコマンドは正しく構成されておらず、command -flag arg1 arg2実際には正反対です。それは単に使用されたフラグに依存します。開発者がなぜこの特定の形式を選択したのかについては、find開発者に尋ねる必要があるようです。

答え3

findcpioほとんどの元のUnixユーティリティの作成者ではなく、Dick Haightが作成しました。当時、ライブラリにリンクできるコマンドライン引数の解析ライブラリがなかったため、一貫性を強制/インセンティブ化できました(80年代半ばにはgetopt複数のシステムにソースコードがありました)。

人々がスクリプトでコマンドとその引数を使用すると、既存の関数の構文を変更することは困難です。

答え4

findオプションによって制御される単純なコマンドではなく、独自の制御言語を実装したコマンドです。

CLIはfind次のとおりです。

find [options] path1..pathn [expression]

-Hここで、-Lと同じオプションが使用-Pされます。expressionfind control language

:のような引数は基本演算子であり、完全な式はそのようなフィルタと演算の数学的説明と考えることができるため-name呼び出されます。primaries-print-exec

find command language非常に強力ですが、まだ学習しやすい言語です。ディレクトリツリーをナビゲートし、従来のUNIXコマンドラインオプションのみを使用して動作を達成しようとするプログラムは、一般的に弱く学習するのが難しいです。例えばGNU tar対。 star(後者はfind command language

関連情報