Taz*_*hem 12 command-line bash regex directory batch-rename
我目前正在努力处理一些音乐文件夹。我曾经决定按照以下模式命名它们:artist - album - year. 我今天意识到这不是一个聪明的举动,现在想要按照模式命名我的目录:year - artist - album因为它们会在列出时按升序显示。
我开始手动重命名,但是,大约有 700 个文件夹,必须有一种更简单的方法;我尝试使用,gprename但我不太擅长正则表达式和 bash 脚本...
有没有人可以帮助我饶恕我可怜的指尖?
一些例子:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
Run Code Online (Sandbox Code Playgroud)
会成为
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
Run Code Online (Sandbox Code Playgroud)
编辑:某些艺术家和专辑名称具有特殊字符,如And.Id或Kool & The Gang。虽然每个目录都有 -作为分隔符。
Zan*_*nna 17
假设您可以访问 perl rename(通常在 Ubuntu 中可用 - 感谢 @Serg 澄清差异。如果有疑问,请致电/usr/bin/rename,您应该得到正确的),您可以使用:
rename -n 's/(.*) - (\d{4})\//$2 - $1/' */
Run Code Online (Sandbox Code Playgroud)
-n测试后删除以实际重命名目录。这假设所有专辑的日期都在 1000 到 9999 之间。可能是合理的......
s/old/new替换old为new(.*)保存任意数量的任何字符以供$1以后参考(\d{4})\/在行尾保存四位数字以供$2稍后参考。*/ 匹配所有目录(不是文件 - 感谢@muru 的帮助!)简单的 Python 脚本可以完成这样的工作:
$ tree
.
??? Aes Dana - Memory Shell - 2004
??? Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
??? rename_dirs.py
2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
??? 2004 - Aes Dana - Memory Shell
??? 2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
??? rename_dirs.py
Run Code Online (Sandbox Code Playgroud)
脚本内容:
$ tree
.
??? Aes Dana - Memory Shell - 2004
??? Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
??? rename_dirs.py
2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
??? 2004 - Aes Dana - Memory Shell
??? 2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
??? rename_dirs.py
Run Code Online (Sandbox Code Playgroud)
*/只提供目录作为脚本的参数-。新文件名由我们提取的部分构成。move()来自shutils模块的函数实际上是重命名目录注意用法: ./rename_dirs.py */