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!