我想使用正则表达式重命名文件夹中的所有文件(在名称末尾添加名称)并移动到另一个文件夹。
在我看来,它应该是这样的:
mv -v ./images/*.png ./test/*test.png,但它不起作用。
谁能建议我一个解决方案?
在基于 Debian 的系统(包括 Ubuntu)上,有一个方便的 perl 文件重命名脚本与主要的 Perl 包一起安装。它通常被命名为rename,但有时也被称为prename(Perl 重命名)。像这样使用:
rename expr file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
该命令使用 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
Run Code Online (Sandbox Code Playgroud)
如果文件与表达式不匹配(例如,非 PNG 文件),则替换不会执行任何操作,并且不会更改它们的文件名。
小智 6
我也喜欢 John T 发布的重命名命令,但它并非在所有系统上都可用。这应该适用于任何地方:
for i in *.png; do mv -v $i `basename $i .png`.test.png; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19363 次 |
| 最近记录: |