find . -type d -exec sh -c '
for pathname do
set -- "$pathname"/*/
[ "$#" -eq 2 ] && printf "%s\n" "$pathname"
done' sh {} +
O comando acima imprimirá os nomes de caminho de todos os diretórios no diretório atual que contém exatamente dois subdiretórios.
O script sh -c
em linha obtém nomes de caminho dos diretórios encontrados em find
em lotes e itera em cada lote, um diretório por vez.
Para cada diretório, $pathname
, o shell glob "$pathname"/*/
é expandido. Esse padrão se expandiria para todos os nomes de caminho de todos os subdiretórios diretamente sob $pathname
(ou permaneceria não expandido se não houvesse subdiretórios). O parâmetro $#
conterá o número de itens para os quais o padrão foi expandido e, se for dois, o caminho para o diretório será impresso.
O acima não contaria diretórios ocultos. Para isso, use bash
com sua opção dotglob
shell ativada:
find . -type d -exec bash -O dotglob -c '
for pathname do
set -- "$pathname"/*/
[ "$#" -eq 2 ] && printf "%s\n" "$pathname"
done' bash {} +
Relacionados: