我想使用命令行重命名多个文件,从文件名中删除一个模式,同时保留其余部分。
原始输出:
$ 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
-
-i
mv
- 是
${f#*- }
字符串操作并从每个文件名中删除您不想要的部分。 - 所有变量都用引号引起来,以防止文件名中含有空格或通配符而破坏命令。始终用双引号引起变量。
rename
和rename
这在 Linux 发行版中很常见,例如如果你想指定艺术家:
rename 's/Versailles - //' *
或者如果你想删除直到最后一个的所有内容-
:
rename 's/.*- //' *
扎什
在 Zsh 和zmv
,您需要加载autoload -U zmv
:
zmv 'Versailles - (*)' '$1'