2つのサブディレクトリを持つすべてのディレクトリを検索する[閉じる]

2つのサブディレクトリを持つすべてのディレクトリを検索する[閉じる]

注文する

find ~ -maxdepth 2 -mindepth 2

他の解決策は機能しませんか?

まあ、解決策を見つけました。

find ~ -maxdepth 1 -links 4 -type d

この問題を解決しようとしている人のために

答え1

find . -type d -exec sh -c '
    for pathname do
        set -- "$pathname"/*/
        [ "$#" -eq 2 ] && printf "%s\n" "$pathname"
    done' sh {} +

上記のコマンドは、2つのサブディレクトリを含む現在のディレクトリの下のすべてのディレクトリのパス名を出力します。

インラインスクリプトは、バッチsh -cで見つかったディレクトリのパス名を取得し、find一度に1つのディレクトリごとに各バッチを繰り返します。

各ディレクトリに対して、$pathnameシェルグローブが"$pathname"/*/拡張されます。このパターンは、直下のすべてのサブディレクトリのすべてのパス名に展開されます$pathname(またはサブディレクトリがない場合は拡張されていません)。この引数には、$#パターンが拡張される項目の数が含まれ、2つの場合はディレクトリパスが印刷されます。

上記は隠しディレクトリを計算しません。これを行うには、次を使用します。シェルオプションがbash有効な状態で:dotglob

find . -type d -exec bash -O dotglob -c '
    for pathname do
        set -- "$pathname"/*/
        [ "$#" -eq 2 ] && printf "%s\n" "$pathname"
    done' bash {} +

関連:

答え2

stat書くことができますか?ハードリンク数を2(親ディレクトリリンク+..リンク)+サブディレクトリ数として使用してみてください。

stat -c"%n %F %h" * | sed -n '/directory 4/ s///p;'

関連情報