重命名包含不同编号的多个文件

重命名包含不同编号的多个文件

我有多个具有以下格式的文件:(请注意,文件对应于每个不常见的文件名)。

File1_S20.tab
File2_S25.tab
File3_S40.tab
etc.

我想将它们全部重命名,使它们变成:

File1
File2
File3
etc.

基本上_S$$.tab从所有文件中删除该部分。

对于重命名文件,我通常使用重命名命令,如下所示:(rename # somethingelse *.tab替换#somethingelse)。

但我遇到的唯一麻烦是每个文件在S.

答案1

听起来你有 util-linux 版本的rename,它不会那么容易弯曲。还有一个基于 Perl 的工具,称为rename. (看:“重命名”和“mv”有什么区别?

使用 Perl 重命名,如果你能得到它,那很容易(或者添加-n看看它会做什么):

rename 's/_S\d+\.tab//' File*.tab

(在 Perl 中实现重命名循环相对简单,但正确且安全地实现它需要几行代码。)

但您可以通过 shell 中的循环来完成此操作:

for f in File*.tab; do
    mv -n -- "$f" "${f%%_S[0-9][0-9].tab}"
done

(或者"${f%%_S*.tab}"匹配任意数字来代替这两个数字,或者shopt -s extglob在 Bash 中使用,然后"${f%%_S+([0-9]).tab}"在那里匹配任意数量的数字。)

相关内容