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
cd
demaiscd $1/$i counting $i # which in turn calls ... ls -a $1
ls
-parando e excluindo variáveis não mencionadas, isso tentará listar o conteúdo do diretório./foo/bar/bar
quando tudo que você tiver for./foo/bar
.