在Bash中替换/替换文件重命名的字符

在Bash中替换/替换文件重命名的字符,bash,rename,Bash,Rename,我在目录中有以下文件名: file_foo_01_2010.nc file_foo_02_2010.nc ... file_foo_12_2018.nc 我想立即将它们全部重命名为: file_foo_2010_01.nc file_foo_2010_02.nc ... file_foo_2018_12.nc 我知道我可以在bash脚本中循环每个文件并以这种方式执行,但我想知道是否有更简洁的方法来执行它?比如: mv file_foo_12_201?.nc file_foo_201?_12.

我在目录中有以下文件名:

file_foo_01_2010.nc
file_foo_02_2010.nc
...
file_foo_12_2018.nc
我想立即将它们全部重命名为:

file_foo_2010_01.nc
file_foo_2010_02.nc
...
file_foo_2018_12.nc
我知道我可以在bash脚本中循环每个文件并以这种方式执行,但我想知道是否有更简洁的方法来执行它?比如:

mv file_foo_12_201?.nc file_foo_201?_12.nc
重命名每个12月的文件等


我基本上想用12-15来切换角色9-10,但不确定如何使用bash来实现这一点。我知道
重命名
,但不确定它是否可以用于我的用例。

使用Perl的
重命名

$ rename -n 's/(_[^_]+)(_[^_]+).nc$/$2$1.nc/' *.nc
rename(file_foo_01_2010.nc, file_foo_2010_01.nc)
rename(file_foo_12_2018.nc, file_foo_2018_12.nc)

如果您对结果满意,请删除
-n

不确定副本是否准确回答了我的问题?我会告诉你如何替换字符串,但不会像我要求的那样替换字符。是的,是的。您希望使用其中一种工具,可以使用正则表达式,如“重命名”。您需要使用两个捕获组,两个数字模式各一个。。好啊在阅读了所有的问题和答案后,我仍然一点也不聪明,只有感谢下面的答案,我才有了一个解决方案。我知道我必须使用
重命名
或类似方法,但我正在努力理解/如何进行“捕获组”,而被骗者的回答没有完全解释。谢谢-为我工作。请你解释一下你答案中的
([^ _]+)([^ _]+)
部分,我可以接受吗?