我有一些名为的文件:
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)保留第一个单词后面的文件名中存在的所有字符。
有人能帮帮我吗?
提前谢谢
答案 0 :(得分:1)
这可以使用Perl的rename
实用程序来实现,该实用程序可能会被称为rename
,prename
或perl-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/^[^_]*_//' *