在 for 循环中,如何仅在单行(更新)上回显当前文件而不是生成列表的每个文件?

在 for 循环中,如何仅在单行(更新)上回显当前文件而不是生成列表的每个文件?

这是我在这个 stackexchange 上的第一个问题,我相信,随着我对 Linux 世界的进一步了解,还会有更多问题...

我在 shell 脚本中有一个 for 循环,可以批量将所有文件重命名为其原始名称的子字符串(最后 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

只需将 echo 行更改为以下内容:

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

末尾的空格清除了行中的旧输出。

相关内容