複数のファイルの名前を変更する方法

複数のファイルの名前を変更する方法

重複の可能性:
正規表現を使用して多数のファイル名を変更するには?

私に電話したことがあります。

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

zsh の使用に代わるものを検討したい場合は、次renameのように書きます。

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を使用すると、あまり正確でないタスクを実行できますshextglob

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

関連情報