如何重命名多个文件

如何重命名多个文件

可能的重复:
如何使用正则表达式重命名大量文件?

我有一些名为

abc-10.5.3.1-1.x86_64.rpm
abc-compiler-10.5.3.1-1.x86_64.rpm
abc-10.5.3.1-6.x86_64.rpm   
abc-compiler-10.5.3.1-6.x86_64.rpm

我想在构建文件时删除次要版本号(1-1 和 1-6)。我不知道如何在 Redhat linux 上使用 rename 命令来实现这一点。生成的文件名应为:

abc-10.5.3.x86_64.rpm

该命令不采用正则表达式。

答案1

如果您想考虑rename使用 zsh 的替代方案,我会写:

autoload -U zmv
zmv -n '(*).<->-<->(.[^.]##.rpm)' '$1$2'

(高兴时删除-n)。

答案2

如果你rename(1)是这样的这个软呢帽我不认为它会为你想做的事起作用。

这是一种方法,需要bash

( shopt -s extglob
for f in ./*-+([.[:digit:]])-+([[:digit:]]).x86_64.rpm; do
    mv -v -- "$f" "${f%-+([[:digit:]]).x86_64.rpm)}.x86_64.rpm"
done )

+([.[:digit:]])部分用于匹配主/次版本号,+([[:digit:]])后面的部分-用于匹配您要删除的补丁号。

您还可以使用 POSIX 做一些不太准确的事情sh,它缺乏extglob

for f in ./*-*-*.x86_64.rpm; do
    mv -v -- "$f" "${f%-*.x86_64.rpm}.x86_64.rpm"
done

相关内容