如何将具有不同名称的多个文件重命名为 file1、file2、file3 等?

如何将具有不同名称的多个文件重命名为 file1、file2、file3 等?

假设我的文件夹中有以下文件:

cat.txt
dog.txt
house.txt
tree.txt

我想将它们全部重命名为如下名称:

file1.txt
file2.txt
file3.txt
file4.txt

可以通过命令行完成吗?

我只看到有关重命名具有某种模式的文件的问题,例如 rename dog1.txtdog2.txt-> cat1.txtcat2.txt

答案1

使用rename实用程序来执行此操作:

rename -n '$_ = sprintf "file%d.txt", ++$::count' *

笔记

  • -n让命令显示运行该命令后会发生什么。如果输出符合您的要求,则运行该命令而不-n实际重命名文件。
  • 将 替换*为您想要重命名的内容,例如:dog*.txt仅重命名dog1.txtdog2.txt... 至file1.txtfile2.txt,等等。
  • $_是我们应该修改的默认输入(文件名)。
  • 使用=我们正在修改它
  • 我们sprintf定义一个以开头、以 结尾的file模式。%d.txt
  • 将使用 分配数字(%d)++$::count,这是每次重命名后迭代的简单计数器。

这个想法来自于这里

答案2

或许完成了,但有一些注意事项。您已经声明“...这些文件在我的文件夹中”,这将是其中的一个注意事项。我们可以使用globstar并迭代扩展的文件名:

$ c=0;for f in *; do ((c++));  echo "$f" "--->" file"$c".txt ; done                            
cat.txt ---> file1.txt
dog.txt ---> file2.txt
house.txt ---> file3.txt
tree.txt ---> file4.txt

当然,你总是可以通过 来“手动”操作list.txt,你可以存储文件名列表并通过while IFS= read -r ; do ... done < list.txt

$ c=0; while IFS= read -r f; do ((c++)); echo "$f" file"$c" ; done < input.txt                 
cat.txt file1
dog.txt file2
tree.txt file3

当然,这个列表主题可以以多种方式扩展 - csv 列表、json 文件、键值列表 - 随便你怎么说。网上有很多关于这些的问题。当然,你还必须做出其他选择,例如提供文件的完整路径或在与列表相同的目录中执行所有操作。

最后,我已经提到了键值列表。使用bashPython 或 Perl 等其他更现代的脚本语言,您可以创建一个哈希表(或字典),其中包含文件列表和您希望文件具有的相应新名称。

相关内容