如何批量替换多个文件的前缀?
我有很多文件,比如
我想将它们全部更改为
我该怎么做?
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
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)