我想使用正则表达式重命名文件夹中的所有文件(在名称末尾添加名称)并移动到另一个文件夹。
我认为它应该是这样的:
mv -v ./images/*.png ./test/*test.png
,但它不起作用。
有人能给我建议一个解决办法吗?
答案1
我也喜欢 John T 发布的重命名命令,但它并非在所有系统上都可用。这应该在任何地方都有效:
for i in *.png; do mv -v $i `basename $i .png`.test.png; done
答案2
有一个方便的 perl 文件重命名脚本,它与基于 Debian 的系统(包括 Ubuntu)上的主 Perl 包一起安装。它通常名为rename
,但有时也被称为prename
(Perl rename)。使用方式如下:
rename expr file1 file2 file3
该命令使用 Perl 评估expr
每个file
参数,并将每个文件重命名为expr
评估的输出。因此,对于像您的示例这样的简单正则表达式替换:
rename 's(images/(.*)\.png$)(test/$1.test.png)' ./images/*
# here's the expression:
# s()() -- just like s/// (but i don't need to escape the / in the filename)
# match regex: images/(.*)\.png$ -- match filenames of the form images/*.png
# replace: test/$1.test.png -- turn them into test/*.test.png
如果文件与表达式不匹配(例如,非 PNG 文件),则替换将不会执行任何操作,并且其文件名也不会改变。
答案3
您可以使用rename
接受正则表达式或这个基本的 3 个参数语法:
重命名 .png .test.png *.png
- 第一个参数是文件名中要替换的内容
- 第二个参数是用什么来替换它
- 第三个参数是针对哪些文件执行操作,在本例中为所有 png。