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.