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ではありません)。