![如何重命名多个文件](https://linux22.com/image/27643/%E5%A6%82%E4%BD%95%E9%87%8D%E5%91%BD%E5%90%8D%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6.png)
可能的重复:
如何使用正则表达式重命名大量文件?
我有一些名为
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