"ls -l"を使用してディレクトリ内のサブディレクトリの数を確認できますか?

showディレクトリを使用する場合、ls -l対応するリンク数(出力の2番目のフィールド)は少なくとも2つです。 1つはディレクトリ名用、もう1つはディレクトリ名用です。.

$ mkdir foo
$ ls -l
total 2
drwxr-xr-x  2 user   wheel  512  4 oct 14:02 foo

2より大きいリンク数がそのディレクトリのサブディレクトリ(リンク)数と一致すると仮定するのは安全ですか..

ベストアンサー1

これは通常Unixシステムでは、ディレクトリへのリンクの数はサブディレクトリの数に2を加えたものです。これは正しいです。ただし、次の場合はそうではありません。

  • 一部の unices はディレクトリへのハードリンクを許可します。これにより、サブディレクトリに対応しないリンクが2つ以上あるようになります。

  • .一部のファイルシステムディレクトリにはエントリがありません..。これGNU検索マニュアル-noleafそのオプションを議論するとき(すべてのディレクトリに存在すると仮定される最適化を無効にするために)、いくつかの例が挙げられます。「CD-ROMまたはMS-DOSファイルシステムまたはAFSボリュームマウントポイント」...

サブディレクトリの数を数える最も信頼できる方法(ファイル名に改行文字が含まれている場合はまだ失敗する可能性があります)は次のとおりです。

$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)

より安定した方法はシェルグローブを使用することです*/.*/通常どおりパターンの不一致を処理するのは少し面倒です(nullglobオプションを設定できるbashとzshではありません)。

おすすめ記事