我有一组文件的:
名称中包含(冒号)。我需要将其替换:
为-
(破折号)。
有没有一种简单的方法可以在脚本中做到这一点?
示例文件名: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 "-" *