Em um loop for, como faço para ecoar apenas o arquivo atual em uma única linha (atualização) em vez de cada arquivo que produzirá uma lista?

1

Minha primeira pergunta sobre este stackexchange, e eu tenho certeza que haverá mais, à medida que eu me aventure no mundo do que é o Linux ...

Eu tenho um loop em um script de shell que renomeia todos os arquivos para uma substring (os últimos n caracteres) de seu nome original.

Será echo a cada iteração em uma nova linha para eventualmente produzir uma lista de todos os arquivos, mas como manter esse eco em uma única linha / atualização para que não produza essa lista (às vezes grande)?

echo "- Renaming file..."

for file in 'find fldr -type f'
do
  newf=$(echo $file | rev | cut -c -6 | rev)
   mv -f $file fldr/$newpt
  echo "  * $file > $newf"
done

saída real ...

- Renaming file...
  * file1a.txt > 1a.txt
  * file2a.txt > 2a.txt
  * file3a.txt > 3a.txt
  * ...

saída desejada ...

- Renaming file...
  * file3a.txt > 3a.txt

Eu gostaria de ver a única linha sempre mudando para mostrar apenas o arquivo atual.

[BONUS] Como eu poderia mostrar também o n'th arquivo que ele está renomeando?

- 3 files renamed...
  * file3a.txt > 3a.txt

Onde n é uma soma / contagem cumulativa dos arquivos renomeados.

    
por SaultDon 07.06.2011 / 08:00

1 resposta

2

Basta alterar a linha de eco para esta:

echo -ne "\r  * $file > $newf                         "

Os espaços no final limpam a saída antiga da linha.

    
por 07.06.2011 / 08:08

Tags