批量重命名,更改前缀

Eri*_*kTJ 66 filenames rename

如何批量替换多个文件的前缀?

我有很多文件,比如

  • 测试SRConnectionContext.h
  • 测试SRConnectionContext.m

我想将它们全部更改为

  • CLConnectionContext.h
  • CLConnectionContext.m

我该怎么做?

car*_*aug 69

我会说最简单的方法是使用rename许多 Linux 发行版中常见的命令。此命令有两个常见版本,因此请查看其手册页以找到您拥有的版本:

## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *

## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
Run Code Online (Sandbox Code Playgroud)

如果你想在 Debian 系统中使用来自 util-linux-ng 的版本,它在名称下可用 rename.ul

  • 警告:野外存在多个版本的“重命名”。检查您当地的“重命名”文档以了解如何使用您的文档。 (8认同)

mrb*_*mrb 46

for name in TestSR*
do
    newname=CL"$(echo "$name" | cut -c7-)"
    mv "$name" "$newname"
done
Run Code Online (Sandbox Code Playgroud)

这使用 bash 命令替换通过 删除输入文件名中的前 6 个字符cut,添加CL到结果中,并将其存储在$newname. 然后它将旧名称重命名为新名称。这是对每个文件执行的。

cut -c7-指定只应从输入返回索引 7 之后的字符。7-是从索引 7 开始没有结束的范围;也就是说,直到行尾。

以前,我曾使用cut -b7-, 但-c应改为用于处理每个字符可能有多个字节的字符编码,如 UTF-8。


jw0*_*013 39

Shell 参数扩展对于像这样的简单转换就足够了。命令替换效率较低,因为需要产生额外的进程(对于命令替换本身和cut/ sed)。

for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
Run Code Online (Sandbox Code Playgroud)

  • 说明:`TestSR*` 查找文件,`CL${f#TestSR}` 将是新名称。`#` 之后的内容将从文件名 (`f`) 中替换。 (2认同)