我正在尝试重命名我的电影收藏。目前所有文件都使用点而不是空格命名,例如 Men.in.Black.avi。我想用空格替换所有点,这并不难,但我需要保留最后一个点作为文件扩展名,例如 .avi、.mp4、.ogg 等。
我谷歌搜索没有找到解决方案。我也是一名 Javascript 开发人员,可以看到一些时髦的应用程序。所以,有什么建议吗?
答案1
一种方法是使用Perlrename
实用程序。Perl 正则表达式\.(?=.*\.)
仅当后面有另一个点时才会匹配一个点。
rename 's/\.(?=.*\.)/ /g' *.*.*
如果您还想对子目录中的文件进行操作:
shopt -s globstar # you can put this in your ~/.bashrc
rename 's/\.(?=.*\.)/ /g' **/*.*.*
假设目录名称中没有点,则此方法有效。否则,我认为最简单的方法是使用find
:
find -depth -name '*.*.*' -exec rename 's/\.(?=.*\.)/ /g' {} +
或者,使用 zsh(由于(.)
末尾的 glob 限定符,这只会重命名常规文件并保留目录名称):
autoload zmv # you can put this in your ~/.zshrc
zmv -Q '(**/)(*.*)(.[^.]##)(.)' '$1${2//./ }$3'
答案2
在写这个问题时,我突然想到我还没有检查过 Ubuntu 软件中心。我找到了一个应用程序 pyRenamer,它出色地完成了我的任务。我最终将所有的点都改为空格,然后将所有以空格开头的文件扩展名(即“avi”、“mp4”、“ogg”)都改为用点代替空格。这不是最好的选择,因为可能会有一部电影的标题是 avi 或 ogg,这会非常麻烦,但这次它成功了。
我仍然对更简单的 RegEx 解决方案感兴趣。
答案3
cd $movielibrary
rename -n 's/\./ /g;s/ ([^ ]*$)/.$1/' *
看起来不错吧?重新运行最后一个不带 -n 的命令。