サブディレクトリを含まないディレクトリを探す

サブディレクトリを含まないディレクトリを探す

私が書いたスクリプトはkshです。ファイルのみが含まれ、サブディレクトリは含まれていない現在のディレクトリの下に直接すべてのディレクトリ名を見つける必要があります。

私は最初のフィールド(ディレクトリの場合)ls -alRにある最初の文字の出力を使用して再帰的に解析できることを知っています。私はこれが分析して見つけるのに最適な方法だとd思います。awk

たとえば、ls -al現在のディレクトリの単純な出力は次のようになります。

   drwxr-xr-x  22 af      staff    748 18 Mar 22:21 .
   drwxr-xr-x   5 root    admin    170 17 Mar 18:03 ..
   -rw-------   1 af      staff      3 17 Mar 16:37 .CFUserTextEncoding
   drwxr-xr-x   5 af      staff    170 17 Mar 17:12 Public
   drwxr-xr-x   9 af      staff    306 18 Mar 17:40 Sites
   -rw-------   1 af      staff      3 17 Mar 16:37 textd

Publicこの出力には2つのディレクトリがありますSites。ディレクトリにはPublicサブディレクトリはありませんが、含まれていますSites。その中には3つのサブディレクトリがありますSites。したがって、ディレクトリがないディレクトリだけをエコーできます。私が知っている限り、私はそうですSites

ベストアンサー1

find「一般的な Unix ファイルシステム」(例:検索(1)下に-葉がないオプション説明)次のコマンドを使用できます。

find . -type d -links 2

各ディレクトリには少なくとも2つの名前(ハードリンク).とその名前があります。そのサブディレクトリ(存在する場合)は親ディレクトリを指す..ため、N個のサブディレクトリがあるディレクトリのハードリンク数はN + 2です。したがって、ハードリンク数が2のディレクトリを検索すると、サブディレクトリがN = 0のディレクトリを検索します。

したがって、これは利用可能な場合は最速の方法である可能性があり、find各メンバーのディレクトリ内容に対してシェルの内部を繰り返すよりもはるかに優れています。stat()

おすすめ記事