我有一个包含一堆文件的目录,其名称如下:
我想重命名所有这些,只保留数字和扩展名,如下所示:
如何使用Shell脚本执行此操作?
我会使用(perl-)重命名。发行版提供了两种类型的重命名,因此您可以检查是否安装了Perl版本的重命名
$ rename --version
perl-rename 1.9
将其运行-n
以将命令测试为“空运行”。
$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' * -n
generic name- dd -01 _.txt -> 01.txt
generic name- dd -02 _.txt -> 02.txt
generic name- dd -03 _.txt -> 03.txt
generic name- dd -04 _.txt -> 04.txt
当您满意时,运行命令本身。
$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' *
rename 's/foo/bar/' *
:重命名的所有文件(*
),取代了正则表达式foo
用bar
。[^0-9]*([0-9]*).*
:匹配所有非数字字符[^0-9]*
,后跟数字字符,并包含在“捕获组”中([0-9]*)
,然后是其余字符.*
。这将匹配整个文件名。\1.txt
:将文件名替换为捕获的组\1
,并附加.txt
。如果您安装了更简单的重命名,则会看到类似这样的内容。
$ rename --version
rename from util-linux 2.33.1
在这种情况下,可以使用以下两个命令:
$ rename 'generic name- dd -' '' *
$ rename ' _' '' *
但我强烈建议改为学习perl-rename。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句