ls
にファイルやディレクトリではなくディレクトリのみを表示させる方法はありますか?
Manページから:
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links
したがって、/
ディレクトリディレクトリのみが表示されることを期待しています。代わりに「。」が表示されます。
$ cd /
$ ls -d
.
私は期待していました ls -d
これを表示するには:
$ ls -d
bin data home opt sbin sys var
boot dev lib media proc selinux tmp
cdrom etc lost+found mnt root srv usr
ls
にファイルやディレクトリではなくディレクトリのみを表示させる方法はありますか?
あなたの期待はDOS Think/Windows Thinkに基づいており、間違っています。 MS-DOS、Windows、および実際には他のいくつかのIBM/Microsoftオペレーティングシステムでは、ワイルドカード拡張はコマンド自体によって行われ、dir
コマンドの_/a
_オプションなどは属性フィルターとして機能しますワイルドカード展開中。 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
では)_*
_を名前のリストに展開するときに、シェルにアクセス許可とファイルタイプビットをチェックするように指示する方法はありません。ディレクトリ名のみのリストを取得するには、_ztank1013
_で説明されているようにfind
コマンドを使用するか、スラッシュで終わるパス名がディレクトリを意味するというトリックを使用する必要があります。エントリJin
で説明されている_.
_。 (Jin
のトリックは、ls
コマンドが引数を受け取ることで終わります
ls bin/home/opt/var/boot/dev/tmp/etc/lost + found/root/usr /
パターン_*/
_は実際にはパス名と2つのコンポーネントが一致し、2番目のコンポーネントは空であるため、quiteが望んだことを実行しないためです。特に、ディレクトリを指すシンボリックリンクを、あたかもディレクトリであるかのように扱います。)
_ls -d
_なしの_*
_の動作は、上記の単純な拡張です。 ls
についてもう1つ知っておく必要があります。引数を指定しない場合、デフォルトの引数は_.
_と見なされます。 _-d
_オプションをなしにすると、前述の動作により、_.
_で指定されたディレクトリの内容が列挙され、その内容の情報が表示されます。 With_-d
_オプションを使用すると、ディレクトリ_.
_はファイルのように扱われ、列挙された内容ではなく、独自の情報が表示されます。
あなたは使うことができますls -d */
、またはls -d .*/
隠しディレクトリ。
これを試して
find . -mindepth 1 -maxdepth 1 -type d
現在の場所の下のディレクトリのみを取得します。
ls -l
(ELL)オプションのような詳細のみでディレクトリを表示したい場合は、以下を使用できます。
find -maxdepth 1 -type d -ls;
上記では、-l
オプションで取得できるような詳細のみが表示されます。
あなたはおそらくそれも好きでしょう
tree -d
すべてのディレクトリとサブディレクトリがツリー構造のグラフィカルな描写とともにきちんと一覧表示されます。
別の方法で仕事をしたい場合は、これを試してください:
ls -l | grep ^d
この状況では単一のツールで十分ですが。パイプラインは常にあなたを助けるためにあります。 Linuxの柔軟性が気に入っています。
これがあなたの必要性を正してくれることを願っています。以下のコマンドは、指定されたパスのディレクトリのみを一覧表示します。
ls -F <path> | grep /
例:
ls -F ~ | grep /