使用 mmv,如何将每个 x 替换为 y?

ych*_*che 1 filenames rename mmv

所以我的文件名如下所示:

Building+a+Container+for+Robust+Conversations.pdf

我想使用 mmv 来重命名它,如下所示:

Building_a_Container_for_Robust_Conversations.pdf

或者像这样:

BuildingaContainerforRobustConversations.pdf

Tim*_*Tim 5

(假设你想对当前目录下的所有文件执行相同的操作...)

要将 + 替换为 _ :

mmv '*+*' '#1_#2'
Run Code Online (Sandbox Code Playgroud)

剥离 + :

mmv '*+*' '#1#2'
Run Code Online (Sandbox Code Playgroud)

现在,mmv仅替换每个文件的第一个匹配的+。如果您从 shell 手动执行此操作,并且只想/需要执行一次此重命名过程,那么您可以根据需要多次重复该命令。(按向上/向下箭头键是滚动命令历史记录的最简单方法。)如果您打算这样做,那么建议添加 -v(详细)标志,因为它会让您知道 mmv 命令是什么做了,并且没有更多的工作要做。例如:

$ mmv -v '*+*' '#1#2'
a+b+c.jpg -> ab+c.jpg : done
d+e+f.jpg -> de+f.jpg : done
g+h+i.jpg -> gh+i.jpg : done
$ mmv -v '*+*' '#1#2'
ab+c.jpg -> abc.jpg : done
de+f.jpg -> def.jpg : done
gh+i.jpg -> ghi.jpg : done
$ mmv -v '*+*' '#1#2'
*+* -> #1#2 : no match.
Nothing done.
Run Code Online (Sandbox Code Playgroud)

如果您希望一次性替换所有文件中的所有匹配项,或者希望将此命令嵌入到某种脚本中,则需要更精细的解决方案或不同的命令。也许考虑一下?rename

rename 's/\+/_/g' *
or
rename 's/\+//g' *
Run Code Online (Sandbox Code Playgroud)

  • @BlueManCZ 我(正确或错误)假设该命令是手动运行的,并且效率并不是最重要的 - 因此 OP 可以根据需要多次重复该命令。我修改了答案以明确这一点,并建议其他替代方案(如果情况并非如此)。感谢您指出。 (2认同)
  • @ychaouche 在 GNU Bash 4.4.20(安装在 Ubuntu 18.04 上)上,该命令会重命名当前目录中的所有文件,而不仅仅是一个。如果你只想要一个,那么你需要使匹配的字符串足够唯一......但在这一点上,简单地使用 mv 会更有意义。 (2认同)