Como encontrar uma profundidade de um diretório

5

Existe uma maneira de encontrar uma profundidade máxima da determinada árvore de diretórios? Eu estava pensando em usar o find com incrementar o maxdepth e comparar o número de diretórios encontrados, mas talvez haja uma maneira mais simples?

    
por ts01 06.06.2017 / 09:09

3 respostas

13

Uma maneira de fazer isso, assumindo o GNU find :

find . -type d -printf '%d\n' | sort -rn | head -1

Isso não é particularmente eficiente, mas certamente é muito melhor do que tentar diferentes -maxdepth s, por sua vez.

    
por 06.06.2017 / 09:23
5

Tente isso, por exemplo, tentando encontrar a profundidade máxima da árvore sob / , usando

find / -type d

fornecerá todos os diretórios em / , independentemente da profundidade. Então awk o resultado com / como delimitador para encontrar a contagem, e count-1 daria profundidade máxima da árvore a partir de / , então o comando seria:

find / -type d | awk -F"/" 'NF > max {max = NF} END {print max}'
    
por 06.06.2017 / 09:28
0

Considere usar updatedb e, em seguida, locate . Ele executa muito rápido, pois locate consulta um banco de dados e é muito mais rápido do que pedir cada arquivo separadamente. updatedb também é rápido, pois atualiza o banco de dados apenas com alterações, em vez de criá-lo novamente. A única desvantagem é que você pode precisar de privilégios de root para executar updatedb por padrão, a menos que faça e preserve seu próprio banco de dados de espaço do usuário.

Lembre-se de que você pode ter novas linhas em seus nomes de arquivos, para que você tenha mais cuidado ao processar a saída de locate . Melhor usar o byte nulo como um separador de nome de arquivo.

Para resumir:

updatedb && locate -0 "$(pwd)" | awk -v RS='%code%' -F"/" '{print NF-1}' | sort -n | tail -n1

Obrigado @sai sasanka por me fornecer um script awk perfeito.

    
por 06.06.2017 / 17:05