「ls|wc -l」が現在のディレクトリの正しいファイル数を表示するのはなぜですか? [コピー]

「ls|wc -l」が現在のディレクトリの正しいファイル数を表示するのはなぜですか? [コピー]

現在のディレクトリのファイル数を数えようとしたところ、ls -1 | wc -l次の意味が見つかりました。ファイルのリスト(各ファイル名が新しい行に印刷されます)をwcの入力として送信します。ここで、-l入力行数が計算されます。 。これは意味があります。

私は試してみることにしましたが、ls | wc -l正確な数のファイルが提供されて非常に驚きました。lsオプションのないコマンドはファイル名を1行に印刷するので、なぜこれが起こるのか疑問に思います。

ベストアンサー1

からinfo ls

'-1'
'--format=単一列'

1行に1つのファイルを一覧表示します。 これは、標準出力が端末でない場合の「ls」のデフォルトです。

出力をパイプすると、ls各行にファイル名が与えられます。
ls出力が人の目のためだけに列単位でファイルを出力します。


ここでls何をするかを決定します。

  switch (ls_mode)
    {
    case LS_MULTI_COL:
      /* This is for the 'dir' program.  */
      format = many_per_line;
      set_quoting_style (NULL, escape_quoting_style);
      break;

    case LS_LONG_FORMAT:
      /* This is for the 'vdir' program.  */
      format = long_format;
      set_quoting_style (NULL, escape_quoting_style);
      break;

    case LS_LS:
      /* This is for the 'ls' program.  */
      if (isatty (STDOUT_FILENO))
        {
          format = many_per_line;
          /* See description of qmark_funny_chars, above.  */
          qmark_funny_chars = true;
        }
      else
        {
          format = one_per_line;
          qmark_funny_chars = false;
        }
      break;

    default:
      abort ();
    }

源泉:http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

おすすめ記事