Bash如何重命名一系列软件包以删除其版本号?我一直在expr和和玩弄,都%%没有用。例子:Xft2-2.1.13.pkg 变成 Xft2.pkgjasper-1.900.1.pkg 变成 jasper.pkgxorg-libXrandr-1.2.3.pkg 变成 xorg-libXrandr.pkg
3 回答
牛魔王的故事
TA贡献1830条经验 获得超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中,正则表达式的分组顺序是括号前加反斜杠 \(和\),而不是单个括号(和)。
元芳怎么了
TA贡献1798条经验 获得超7个赞
我会做这样的事情:
for file in *.pkg ; do
mv $file $(echo $file | rev | cut -f2- -d- | rev).pkg
done
假设您的所有文件都在当前目录中。如果不是,请尝试使用Javier上面建议的find。
编辑:此外,此版本不使用任何特定于bash的功能,就像上面的其他功能一样,这使您具有更大的可移植性。
- 3 回答
- 0 关注
- 550 浏览
添加回答
举报
0/150
提交
取消