重命名多个文件,排除模式

重命名多个文件,排除模式

我想使用命令行重命名多个文件,从文件名中删除一个模式,同时保留其余部分。

原始输出:

$ ls
Versailles - Holy Grail (2011)
Versailles - Jubilee (2010)
Versailles - Noble (2008)

命令后期望的输出:

$ ls
Holy Grail (2011)
Jubilee (2010)
Noble (2008)

答案1

猛击

使用纯 Bash,删除直到第一个的所有内容-

for f in *; do mv -- "$f" "${f#*- }"; done

如果你想删除所有内容最后的 -,使用##代替#

具体来说:

  • 遍历for当前目录中的每个文件(*),并调用mv找到的每个文件。
  • 告诉停止解析选项,并且是一种保护措施,以防止以开头的文件--被解释为选项(例如,名为的文件会导致在移动之前提示您)。mv--imv
  • ${f#*- }字符串操作并从每个文件名中删除您不想要的部分。
  • 所有变量都用引号引起来,以防止文件名中含有空格或通配符而破坏命令。始终用双引号引起变量。

rename

rename这在 Linux 发行版中很常见,例如如果你想指定艺术家:

rename 's/Versailles - //' *

或者如果你想删除直到最后一个的所有内容-

rename 's/.*- //' *

扎什

在 Zsh 和zmv,您需要加载autoload -U zmv

zmv 'Versailles - (*)' '$1'

相关内容