パスが指定されていない場合、findが先行する "./"を印刷するのはなぜですか?

パスが指定されていない場合、findが先行する

パスが指定されていない場合、find結果が印刷されるのはなぜですか?./

$ find
./file1
./file2
./file3

印刷しないのはなぜですか?

$ find
file1
file2
file3

ベストアンサー1

これ理由このメッセージが表示されるのはGNU開発者によるものです。find 選択済み「合理的な」行動の提供findパスが指定されていない場合。対照的に、POSIXこのパラメーターがオプションであるという宣言はありません。

これfindユーティリティはディレクトリ階層から繰り返しダウンしている必要があります。パスで指定された各ファイル、OPERANDSセクションで説明されている基本色で構成されるブール式は、見つかった各ファイルに対して評価されます。各パスオペランドは、末尾を含む提供されたとおりに評価する必要があります。<slash>文字、階層で見つかった他のファイルへのすべてのパス名には、次のものを含める必要があります。従属現在のパスオペランド、<slash>現在のパスオペランドが1で終わらない場合、ファイル名はパスオペランドに基づいています。関連部分には点または点 - 点コンポーネントを含めないでください。後続部分も含めてはいけません。文字、単一の文字<slash>パス名コンポーネント間の文字です。

各プロファイルの違いを確認できます。 GNUは(慣例による)角括弧内の選択項目:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...]
       [expression]

そして、POSIXはオプションである可能性があることを示していません。

find [-H|-L] path... [operand_expression...]

GNUプログラムでは、これはftsfind.c:

  もし(板)
    {
      /*
       *いくつかのタスクが修正されるので、ここでは一時変数を使用します。
       *一時的なパス。したがって、文字列定数を使用すると、
       *コアダンプを取得します。最良の例は次のとおりです。
       * "find -printf%H"(注、「find .-printf%H」ではありません)。
       */
      charデフォルトパス[2] = ".";
      return find(defaultPath);
    }

そして文字通りの意味"."単純化のために使用されます。それから同じ結果を見るでしょう

find

そして

find .

(そしてPOSIXも同意する)結果の前に付けるために使用されます(上記を参照)。従属)。

少し試してみると、この機能がいつ初めて追加されたかを確認できます。「findutils」は1996年に初めて作成されました。(望むよりfind.c):

+  /* If no paths are given, default to ".".  */
+  for (i = 1; i < argc && strchr ("-!(),", argv[i][0]) == NULL; i++)
+    process_top_path (argv[i]);
+  if (i == 1)
+    process_top_path (".");
+
+  exit (exit_status);
+}

find 3.8の変更ログでは、これは明らかに次のようになります。

Sat Dec 15 19:01:12 1990  David J. MacKenzie  (djm at egypt)

        * find.c (main), util.c (usage): Make directory args optional,
        defaulting to "."

おすすめ記事