Este script define uma função walk()
e, em seguida, executa walk
no primeiro argumento passado para o script.
A função define primeiro uma variável local (uma conhecida apenas pela função e seus filhos) indent
indent
é definido localmente como "${2:-0}"
. Isto significa que se (o segundo argumento recebido pelo comando
walk
) não estiver definido, então faça 0
. Esta variável é local
para que você não possa passar um segundo argumento para o script.
A função então imprime o conteúdo do diretório especificado na linha de comando ( ) neste formato
printf "%*s%s\n" $indent '' ""
Isso significa que imprima $indent
number of spaces e, em seguida, imprima o nome do diretório como uma string (portanto, um número não é esperado) e imprima uma nova linha.
Então a função executa um loop
for entry in /*; do
Isso designa todos os arquivos ou subdiretórios não ocultos em (o diretório especificado como o primeiro argumento para
walk
) para a variável entry
e faz um loop sobre eles, executando este comando neles:
[[ -d "$entry" ]] && walk "$entry" $((indent+4))
Isso significa que, se entry
for um diretório, execute walk
on entry
. Agora walk
tem um segundo argumento $((indent+4))
, que será usado em vez de 0
como o novo valor de indent
. O efeito disso é que o diretório de primeiro nível não é recuado, mas os diretórios de segundo nível são recuados 4 espaços, os espaços de terceiro nível 8, etc. Como entry
é agora o primeiro argumento, do
walk
função, ele irá recurse em toda a estrutura.
O script termina executando a função walk
no parâmetro posicional , o primeiro argumento passado para o script. Uso poderia ser
./script directory
Isso significa que directory
é e
walk
será executado em directory
.
Seria bom se o script imprimisse arquivos regulares, mas eles pareceriam confusos sem alguma formatação elaborada. Eu recomendo usar tree
para essa finalidade em vez do script!