Eu acho que o que você quer fazer é ter uma linha de progresso que é constantemente atualizada sem rolagem, então aqui está algo que escrevi para isso:
files="$(ls /some/folder)"
elems="$(echo "$files" | wc -w)"
cnt=0
for name in $files; do
let "cnt+=1"
printf "\rMyScript - Processing file %3i of %3i: %.40s" "$cnt" "$elems" "$name"
done
echo
Isso fornece uma única linha, por ex. MyScrpit - Processing file 5 of 14: foo.a
.
Você também pode modificar isso para funcionar via pipe semelhante a dialog --progressbox
:
total="$1"
cnt=0
while IFS='$\n' read -r name; do
let "cnt+=1"
printf "\rProcessing file %3i of %3i: %.40s" "$cnt" "$total" "$name"
done < /dev/stdin
echo
É claro que você pode deixar de fora o contador e apenas imprimir os nomes dos arquivos (se você não quiser fornecer a contagem total de antemão como um parâmetro). O comprimento do campo fixo no printf irá garantir que não haverá quebra de linha (a menos que a janela do terminal seja ainda menor).