如何重命名文件和替换字符?

如何重命名文件和替换字符?

我有一组文件的:名称中包含(冒号)。我需要将其替换:-(破折号)。

有没有一种简单的方法可以在脚本中做到这一点?

示例文件名:2013-10-11:11:52:08_055456663_045585_.txt

答案1

一个简单的 1-liner 就可以做到(假设 Posixsh兼容的 shell):

for f in *:*; do mv -v -- "$f" "$(echo "$f" | tr ':' '-')"; done

解释:

  • for ... in ...; do ...; done环形

  • *:* 火柴当前目录中所有名称:中包含

  • f依次分配给循环中的每个这样的文件名

  • mv将其第一个参数重命名为第二个参数;-v(详细)要求它打印它所做的事情;这个选项是GNU实用程序特定于 Linux,因此它适用于 Linux,但不适用于 Solaris

  • $(...) 在子 shell 中执行代码并替换输出

  • echo将其参数打印到标准输出

  • tr读取标准输出并根据提供的映射翻译字符

如果你正在使用狂欢,你可以避免生成$()带有子进程的额外 shell ( ) tr,方法是将其替换$(...)${f//:/-}

答案2

正如我在另一篇文章中所说,基于 Perl 的rename工具(有时称为prename,不要与 Linux 本机工具混淆rename)可以帮你解决问题。你只需要输入

rename s/:/-/g <files to rename>

这将在您以末尾命名的所有文件中用破折号替换每个冒号,即2013-10-*。删除g仅替换第一个冒号。

以下是我的其他帖子的链接

答案3

我确信 UNIX 专业人员可以使用 bash 来完成此操作,但这是我使用 ruby​​ 编写的快速而简单的版本。

path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
  `mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end

将 path_to_files 设置为错误命名文件的路径。将上述代码保存在名为 rename.rb 的文件中,然后:

username@machinename$ ruby rename.rb

答案4

使用重命名器

$ renamer --find ":" --replace "-" *

相关内容