if [ -d "$d" ]; then
(recursiveprint "$d")
fi
Os parênteses em torno da linha (recursiveprint "$d")
executam a função em uma sub-rede. Quando o subshell é iniciado, o valor de FILES_COUNT
é clonado e as alterações feitas na chamada recursiva dentro do subshell não entram em vigor no ambiente circundante.
Sem um subshell, ele deve funcionar melhor, mas você precisa voltar manualmente ao diretório pai ao retornar de uma instância da função. cd ..
faria as chamadas feitas dentro da função, mas vamos usar uma variável para podermos voltar ao diretório de trabalho original, mesmo que seja dado como um caminho absoluto.
recursiveprint() {
local oldpwd=$PWD
cd "$1"
...
if [ -d "$d" ]; then
recursiveprint "$d" # no parenthesis here
fi
...
cd "$oldpwd"
}
Observe também que *
não corresponde a nomes de arquivos começando com um ponto por padrão, use shopt -s dotglob
, se você quiser.