1

Мой первый вопрос об этом обмене стека, и я уверен, что будет больше, когда я углублюсь в мир Linux.

У меня есть цикл for в shell-скрипте, который пакетно переименовывает все файлы в подстроку (последние n символов) своего исходного имени.

Он будет echo каждую итерацию в новой строке, чтобы в конечном итоге создать список всех файлов, но как мне сохранить это эхо в одной строке / строке обновления, чтобы не создавать этот (иногда большой) список?

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

фактический вывод ...

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

желаемый вывод ...

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

Мне бы хотелось, чтобы одна строка всегда менялась, чтобы показывать только текущий файл.

[БОНУС] Как бы мне заставить его также отображать n-й файл, который он переименовывает?

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

Где n - совокупная сумма / количество файлов, переименованных.

1 ответ1

2

Просто измените строку эха на это:

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

Пробелы в конце очищают старый вывод строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .