ls リスト・ディレクトリー・パラメーターが期待どおりに機能しません。

ls リスト・ディレクトリー・パラメーターが期待どおりに機能しません。

現在のディレクトリのすべてのディレクトリ(ファイルではない)だけを一覧表示したいと思います。ls -ld ./*マニュアルページに記載されているディレクトリのみが返されると予想されます。

コンテンツの代わりにディレクトリを一覧表示

現在このコマンドは、現在のディレクトリ内のすべてのファイルとディレクトリを返します。

または、私の要件を満たす次のコマンドがありますが、同じ要件を満たす組み込みオプションがあるかどうか疑問に思います。

ls -lF ./ | grep ".*/$"

ベストアンサー1

この-dフラグはディレクトリに降りるのを防ぎますが、lsこれはまさにその役割です。これは単にディレクトリをリストするという意味ではありません。これら2つのステートメントの間には微妙な違いがあり、ls -d some_fileこれを実行するとls表示されますsome_file。シェルワイルドカード(./*)を使用しているため、ワイルドカードは現在のディレクトリのファイルだけでなく、現在のディレクトリのディレクトリも含むように拡張されます。シェルは代わりにワイルドカードと拡張を実行するため、lsシェルはlsファイルのリストを受け取ります。

この問題を解決するには、シェル glob に通常のファイルが含まれていないことを確認する必要があります。/globの末尾を使用してこれを行うことができます。ファイル名に禁止されている特殊文字ですが、ディレクトリ間の区切りを表すため、ディレクトリのみを一致/させるために使用できます。

たとえば、

ls -d */

おすすめ記事