あなたの期待は 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
現在の場所の下のディレクトリだけを取得します。