macos 通过保留最后 n 个字符重命名所有文件

macos rename all files by keeping the last n characters

我将如何递归重命名

filename9_123.txt
filename10_124.txt
filename11_125.txt

123.txt
124.txt
125.txt

我可以使用 ruby 吗?应该使用默认安装的版本。注意:如果名称冲突,将覆盖文件。

 ruby -e "require 'pathname';Pathname.glob('*_*.txt')
    .each {|f| f.rename f.basename.to_s.split('_').last }"

您可能需要删除换行符,这只是为了更好地格式化此处。

如果您所说的“递归”是指在子目录中:

ruby -e "require 'pathname';Pathname.glob('**/*_*.txt')
    .each {|f| f.rename(f.dirname / f.basename.to_s.split('_').last) }"

此版本失败,它即将覆盖现有文件:

 ruby -e "require 'pathname';Pathname.glob('**/*_*.txt')
    .to_h {|f| [f, f.dirname / f.basename.to_s.split('_').last] }
    .each {|from, to| fail(to) if to.exists?; from.rename to }"