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.
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?
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.
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}'
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.