UNIXディレクトリのサブディレクトリの数を計算する方法は?

UNIXディレクトリのサブディレクトリの数を計算する方法は?

指定されたディレクトリ内のディレクトリの総数を計算する必要があります(サブディレクトリであることに注意してください)。

ファイルの数を計算する方法を知っていますが、スクリプト内のディレクトリの数を数えるのに問題があります。

答え1

@rahulのコメントを少し強く変形させたものです。

find . -type d -mindepth 1 -printf '1'  | wc -c

現在のディレクトリを除いて、現在のディレクトリ内のすべてのディレクトリに「1」()を印刷してから-mindepth 11を計算します。これは改行文字を含むディレクトリ名を処理します。

答え2

/ワイルドカードパターンの末尾にを置くと、パターンはディレクトリとディレクトリへのシンボリックリンクのみに一致します。したがって、次のコードスニペットは、現在のディレクトリのディレクトリとシンボリックリンクを計算します。

set -- */ .*/
if ! [ -e "$1" ]; then shift; fi # handle the case when */ matches nothing
echo $(($# - 2)) # -2 for . and ..

Bashでは、これを次のように単純化できます。

shopt -s dotglob nullglob
dirs=(*/)
echo ${#dirs[@]}

ディレクトリを含めない場合はを使用しますfind。ディレクトリ名に改行文字がない場合は、行数を計算できます。

find . -name . -o -type d -print -prune | wc -l

完全に堅牢にするには、代わりにスラッシュを計算します。

find . -name . -o -type d -print -prune | tr -dc / | wc -c

答え3

現在のディレクトリでのみディレクトリ数を計算します。

find . -mindepth 1 -maxdepth 1 -type d | wc -l

現在のディレクトリとここに含まれるすべてのサブディレクトリのディレクトリ数を計算します。

find . -mindepth 1 -type d | wc -l

関連情報