あなたの期待は DOS Think/Windows Think に基づいており、間違っています。 MS-DOS、Windows、およびその他のいくつかの IBM/Microsoft オペレーティング システムでは、ワイルドカードの展開はコマンド自体によって行われ、/a のようなものです。 dir へのオプション コマンドは、ワイルドカード展開中に属性フィルターとして機能します。 dir * のようなワイルドカードを展開します 、コマンドインタープリターがそのまま渡す、および /a の場合 が指定されている場合、返されるものに適切なフィルターが適用されます。 (一部のオペレーティング システムでは、ディレクトリを列挙するためのシステム コールに属性フィルターを与えることができ、オペレーティング システム カーネルまたはそのファイルシステム ドライバーがそれ自体を適用します。)
Unices と Linux では、ワイルドカードの展開はシェルによって行われ、パーミッションは無視されます。ルート ディレクトリで
ls *
ls は何ですか コマンド自体が受け取る シェルからは(のようなもの)
ls bin home opt var boot dev tmp etc lost+found root usr
-d とは /--directory オプションは通常次に起こることをオフにするです .通常次に起こるのは ls です 各引数を順番に見て、それらがディレクトリであることを確認し、その内容を列挙することを決定します。ファイルに名前を付ける引数の場合、ファイル自体の情報を出力するだけです。 -d で オプションを指定すると、ディレクトリはファイルと同じように扱われます。だから ls ファイルの場合と同様に、引数として渡された各ディレクトリの情報を出力します。
だから -d そうではない 「ディレクトリのみを印刷する」オプション。実際、そのようなオプションがないだけではありません。 あり得ない そのようなオプション。ワイルドカード展開はシェルによって行われ、(POSIX sh 少なくとも) * を展開するときにパーミッションとファイル タイプ ビットをチェックするようにシェルに指示する方法はありません。 名前のリストに。ディレクトリ名のみのリストを取得するには、 find を使用する必要があります ztank1013 で説明されているコマンド 、またはスラッシュで終わるパス名がディレクトリエントリ . を意味するというトリックを使用する 、 Jin で説明されているように . (Jin のトリックは ls で終わります 引数を受け取るコマンド
ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/
パターン */ のため 実際、パス名は 2 つのコンポーネントで一致しており、2 つ目は空であるため、まったく一致しません。 望まれたことをしている。特に、ディレクトリを指すシンボリック リンクをディレクトリであるかのように扱います。)
ls -d の振る舞い * なし 上記の単純な拡張です。 ls についてもう 1 つ知っておく必要があります。 :引数が指定されていない場合、デフォルトの引数 . を想定します。 . なし -d オプションを指定すると、前述の動作により、. という名前のディレクトリの内容が表示されます 列挙され、その内容に関する情報が表示されます。 一緒に -d オプション、ディレクトリ . はファイルのように扱われ、その内容が列挙されるのではなく、それ自体の情報が表示されます。
ls -d */ を使用できます 、または ls -d .*/ 隠しディレクトリ用。
これを試してください
find . -mindepth 1 -maxdepth 1 -type d
現在の場所の下のディレクトリだけを取得します。