我有多个具有以下格式的文件:(请注意,文件对应于每个不常见的文件名)。
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}"
在那里匹配任意数量的数字。)