![2つのサブディレクトリを持つすべてのディレクトリを検索する[閉じる]](https://linux33.com/image/12135/2%E3%81%A4%E3%81%AE%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E6%8C%81%E3%81%A4%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
注文する
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;'