如何更改文件名中某些字符串的顺序

问题描述 投票:0回答:1

我有很多这样的文件:

tf_CVBV6Z_CVSA1Z_pws2_pcc1.sac
tf_CVBV5Z_CVSA2Z_pws2_pcc1.sac
tf_CVBV4Z_CVSA3Z_pws2_pcc1.sac
tf_CVBV3Z_CVSA4Z_pws2_pcc1.sac
tf_CVBV2Z_CVSA5Z_pws2_pcc1.sac
tf_CVBV1Z_CVSA6Z_pws2_pcc1.sac

我想改变顺序最终像这样:

tf_CVSA1Z_CVBV6Z_pws2_pcc1.sac
tf_CVSA2Z_CVBV5Z_pws2_pcc1.sac
tf_CVSA3Z_CVBV4Z_pws2_pcc1.sac
tf_CVSA4Z_CVBV3Z_pws2_pcc1.sac
tf_CVSA5Z_CVBV2Z_pws2_pcc1.sac
tf_CVSA6Z_CVBV1Z_pws2_pcc1.sac

我尝试了重命名选项,但它不起作用。

有什么想法吗?

谢谢

string bash filenames
1个回答
3
投票

使用perl的重命名:

$ rename -n 's/(CV[^_]+)_(CV[^_]+)/$2_$1/' tf_CVSA1Z_CVBV6Z_pws2_pcc1.sac
tf_CVSA1Z_CVBV6Z_pws2_pcc1.sac -> tf_CVBV6Z_CVSA1Z_pws2_pcc1.sac

当输出看起来很好时,移除-n开关。

还有其他具有相同名称的工具可能会或可能不会这样做,所以要小心。

如果您运行以下命令(GNU

$ file "$(readlink -f "$(type -p rename)")"

你有一个包含Perl script, ASCII text executable但不包含ELF的结果,那么这似乎是正确的工具=)

如果没有,为了使它成为DebianUbuntu衍生物的默认值(通常已经是这种情况):

$ sudo update-alternatives --set rename /path/to/rename

/path/to/rename替换为perl rename可执行文件的路径。


如果您没有此命令,请搜索包管理器以安装它或do it manually(没有deps ...)


这个工具最初是由Perl的父亲Larry Wall编写的。

© www.soinside.com 2019 - 2024. All rights reserved.