私が書いたスクリプトは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()