Isso me intrigou, então eu tentei, aqui está meu código:
#!/bin/bash
startIFS=$IFS
IFS=$'\n'
function echocount {
dirs=$(find -type d)
for f in $dirs; do
c=$(find "$f" -maxdepth 1 -type f | wc -l) ;
echo "$c $f";
done
}
echocount | sort -n
IFS=$startIFS
Eu acho isso muito estúpido e irritante em scripts de shell, mas eu preciso mudar o IFS para que apenas novas linhas e não espaços signifiquem outro diretório e o loop seja executado corretamente.
BTW, no seu código, a razão de sempre ter uma contagem de 1 é porque, em echo find "$f" | wc -l
, você está realmente contando as linhas em echo find "$f"
, que sempre será uma única linha (está apenas ecoando literalmente "localizar seja qual for ", na verdade não executando o comando find). Se você retirar o echo
, ele fará o que você espera.
Além disso, os pedantes informam que a notação de backtick está obsoleta. Eu acho a notação $ () mais legível de qualquer maneira.