为了账号安全,请及时绑定邮箱和手机立即绑定

使用Bash批量重命名文件

使用Bash批量重命名文件

至尊宝的传说 2019-10-06 14:02:51
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中,正则表达式的分组顺序是括号前加反斜杠  \(和\),而不是单个括号(和)。


查看完整回答
反对 回复 2019-10-06
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我会做这样的事情:


for file in *.pkg ; do

    mv $file $(echo $file | rev | cut -f2- -d- | rev).pkg

done

假设您的所有文件都在当前目录中。如果不是,请尝试使用Javier上面建议的find。


编辑:此外,此版本不使用任何特定于bash的功能,就像上面的其他功能一样,这使您具有更大的可移植性。


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 550 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信