猿问

使用Bash批量重命名文件

Bash如何重命名一系列软件包以删除其版本号?我一直在expr和和玩弄,都%%没有用。


例子:


Xft2-2.1.13.pkg 变成 Xft2.pkg


jasper-1.900.1.pkg 变成 jasper.pkg


xorg-libXrandr-1.2.3.pkg 变成 xorg-libXrandr.pkg


至尊宝的传说
浏览 551回答 3
3回答

牛魔王的故事

如果所有文件都在同一目录中,则序列ls | sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' | sh会做你的工作。的sed的命令将创建的序列MV命令,这些命令可以然后管进入外壳。最好首先运行不带尾部的管道| sh,以验证命令是否满足您的要求。要遍历多个目录,请使用类似find . -type f |sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' |sh请注意,在sed中,正则表达式的分组顺序是括号前加反斜杠  \(和\),而不是单个括号(和)。

元芳怎么了

我会做这样的事情:for file in *.pkg ; do    mv $file $(echo $file | rev | cut -f2- -d- | rev).pkgdone假设您的所有文件都在当前目录中。如果不是,请尝试使用Javier上面建议的find。编辑:此外,此版本不使用任何特定于bash的功能,就像上面的其他功能一样,这使您具有更大的可移植性。
随时随地看视频慕课网APP
我要回答