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

Duc*_*cky 13 linux centos rename

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

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

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

sds*_*sds 21

一个简单的 1-liner 应该做(假设 Posixsh兼容的外壳):

for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done
Run Code Online (Sandbox Code Playgroud)

解释:

  • for ... in ...; do ...; done是一个循环

  • *:* 匹配当前目录:中名称中包含的所有文件和目录

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

  • mv将其第一个参数重命名为第二个参数;-v(详细)要求它打印它的作用;此选项是特定于GNU-utils 的,因此它在 Linux 上可用,但在 Solaris 上不可用

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

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

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

如果您正在使用bash,您可以通过替换为来避免产生$()带有子进程 ( tr)的额外外壳 ( ) 。$(...)${f//:/-}

  • 您可以将 `$(echo "$f" | tr ':' '-')` 替换为 `"${f//:/-}"` 并避免子shell、管道和外部程序调用。我认为这是一种bashism,但是嗯。[见这里](http://tldp.org/LDP/abs/html/string-manipulation.html#SUBSTRREPL00)。 (2认同)

nog*_*erl 6

正如我在另一篇文章中所述,该rename工具可以为您解决问题。你只需要输入 rename s/:/-/ <files to rename> This 用一个破折号替换你在最后命名的所有文件中的每个冒号,即2013-10-*

这是我另一个帖子的链接