Aqui estão algumas coisas que você pode melhorar (sem qualquer reivindicação de integridade):
-
Nunca analise a saída de
ls.
Seu script será quebrado assim que qualquer nome de arquivo ou diretório contiver espaços em branco (o que é perfeitamente legítimo na maioria dos sistemas de arquivos modernos). Em vez disso, use o recurso de globbing do seu shell:shopt -s dotglob # to make the * glob match hidden files (like ls -a) for i in "$1"/* -
Sempre cite variáveis.
Seu shell analisa os caracteres do espaço em branco (espaço, nova linha,…) para determinar onde um argumento de comando termina e outro inicia. Considere o seguinte exemplo:filename="foo bar" touch $filename # gets expanded to 'touch foo bar', so it creates two files named "foo" and "bar" touch "$filename" # gets expanded to 'touch "foo bar'", so it creates a single file named "foo bar" -
Um
cddemaiscd $1/$i counting $i # which in turn calls ... ls -a $1ls-parando e excluindo variáveis não mencionadas, isso tentará listar o conteúdo do diretório./foo/bar/barquando tudo que você tiver for./foo/bar.