Encontre todos os diretórios com exatamente dois subdiretórios [closed]

1

O comando

find ~ -maxdepth 2 -mindepth 2

não funciona, existe alguma outra solução?

Estou bem, eu tenho a solução:

find ~ -maxdepth 1 -links 4 -type d

Ty para quem tentou resolvê-lo

    
por Stefan xyz 11.10.2018 / 13:53

2 respostas

4

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:

por 11.10.2018 / 14:27
0

stat disponível? Fazendo uso do número de links físicos sendo 2 (link pai dir mais .. link) mais a contagem de subdiretórios, tente

stat -c"%n %F %h" * | sed -n '/directory 4/ s///p;'
    
por 11.10.2018 / 15:18