基于模式,批处理文件在终端重命名

我需要重命名以下内容:

file_001_loremipsum.png file_002_dolor.png file_003_sit.png file_004_amet.png file_105_randomness.png 

 upl_loremipsum.png upl_dolor.png upl_sit.png upl_amet.png upl_randomness.png 

如何通过一行简单的终端命令实现这一目标?

上面例子的解决方案,使用重命名 :

 rename -v -n 's/file_\d{1,3}/upl/' file_*.png 

用法:

 rename [options] [Perl regex search/replace expression] [files] 

man rename

  -v, --verbose Verbose: print names of files successfully renamed. -n, --no-act No Action: show what files would have been renamed. 

重命名可以将正则表达式作为参数。

我们所看到的是单引号之间的内容。 你可以用/分隔正则表达式。

公式: s/(1)/(2)/其中(1) =搜索模式, (2) =替换模式。

因此, 熟悉正则表达式 ,并享受基于模式的批处理文件重命名!

这可以通过bash参数扩展的一点点魔力来完成!

 for f in file_[0-9]*_*; do mv $f upl_${f#file_[0-9]*_}; done 

file_[0-9]*_*; – 第一个模式用于通过’file_anynumber_’开头的所有文件
${f#file_[0-9]*_} – 第二个模式file_[0-9]*_用于参数扩展,它告诉bash从字符串的求求中删除’file_anynumber_’。

有关Parameter expansion更多信息:

 man bash 

如果文件在几个目录中,请在查找之后使用重命名:

 find -iname file_*.png -type f -exec rename -n 's/file_[0-9]{3}(.*\.png)/upl$1/' {} \; 

重命名后的-n是测试,删除它继续! – )

像这样,你关联查找和重命名权力。

就个人而言,我用它来重命名源头.h到.hpp

 find -iname *.h -type f -exec rename 's/(.*\.)h/$1hpp/' {} \;