Answers:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
这使用bash命令替换经由从输入文件名去除前6个字符cut
,预先考虑CL
到的结果,并存储在$newname
。然后,它将旧名称重命名为新名称。这在每个文件上执行。
cut -c7-
指定仅应从输入中返回索引7之后的字符。7-
是从索引7开始且没有结束的范围;也就是直到行尾。
以前,我曾使用过cut -b7-
,但-c
应该改为使用来处理每个字符可能具有多个字节的字符编码,例如UTF-8。
我想说的是,最简单的方法是只使用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 *
如果要在Debian系统中使用util-linux-ng中的版本,则可以使用以下名称 rename.ul
rename
野外存在多种版本。检查您的本地rename
文档以了解如何使用您的文档。
rename TestSR '' *
rename "\<pre\>" "" *
>Unterminated <> operator at (user-supplied code).
Shell参数扩展足以进行像这样的简单转换。由于需要生成额外的进程(用于命令替换本身和cut
/ sed
),因此命令替换效率较低。
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*
查找文件,CL${f#TestSR}
将是新名称。后面的内容#
将从文件名(f
)中替换。
您可以尝试:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
有关man bash
详细信息,请参见(“参数扩展”部分)。