从文件名中进行子设置

时间:2018-06-06 12:13:24

标签: csv unix

我有一些名为的文件:

Mycase_xxx_x_xxx.csv
Mycase_xxx_x_xxx_xx_x.csv
Myanalysis_x_xx_xx_xxx_x_x.csv
Myattempt_xx_x_xxxx.csv

我想用以下方式命名的文件:

xxx_x_xxx.csv
xxx_x_xxx_xx_x.csv
x_xx_xx_xxx_x_x.csv
xx_x_xxxx.csv

换句话说,我希望(通过Unix)保留第一个单词后面的文件名中存在的所有字符。

有人能帮帮我吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

这可以使用Perl的rename实用程序来实现,该实用程序可能会被称为renameprenameperl-rename,具体取决于您的系统。在Debian和Ubuntu上,可以按如下方式安装:

sudo apt install rename

请注意,在某些系统上,命令rename可能是Perl的rename,而在其他系统上可能是util-linux的{​​{1}},而在其他系统上,它可能是GNU rename。这些工具彼此不兼容。

Debian和Ubuntu上的Perl rename工具可以按如下方式使用:

rename

或者应用于当前目录中的所有文件:

prename 's/expression/substitution/' filenames...

Perl prename 's/expression/substitution/' * 的一个有用功能是能够使用正则表达式(请注意支持的语法与rename的语法类似)。

在您的情况下,正则表达式匹配文件名的前缀,包括第一个下划线,如下所示:

sed

然后可以用空字符串替换它以删除文件名的这一部分,从而产生以下命令:

^[^_]*_

在运行此命令之前,如果您不确定并且想要测试文件是否会按照您希望的方式重命名,则可以按如下方式添加标记prename 's/^[^_]*_//' *

-vn

这不会重命名任何文件,而是打印出将要重命名的文件列表,如下所示:

prename -vn 's/^[^_]*_//' *