Linux有问必答:如何在Linux下重命名多个文件
下面是重命名命令的基本语法。
rename [-v -n -f] <pcre> <files>
‘-v’选项会显示文件名改变的细节(比如:XXX重命名成YYY)。
‘-n’选项告诉rename命令在不实际改变名称的情况下显示文件将会重命名的情况。这个选项在你想要在不改变文件名的情况下模拟改变文件名的情况下很有用。
‘-f’选项强制覆盖存在的文件。
下面,就让我们看下rename命令的几个实际例子。
### 改变文件扩展名
假设你有许多.jpeg的图片文件。你想要把它们的名字改成*.jpg。下面的命令就会将*.jpeg 文件改成 *.jpg。
```
$ rename 's/.jpeg$/.jpg/' *.jpeg
```
### 大写改成小写,反之亦然
有时你想要改变文件名的大小写,你可以使用下面的命令。
把所有的文件改成小写:
```
# rename 'y/A-Z/a-z/' *
```
把所有的文件改成大写:
```
# rename 'y/a-z/A-Z/' *
```
![](/data/attachment/album/201502/18/152449qgyweeip0nmy0ntb.jpg)
### 更改文件名模式
现在让我们考虑更复杂的包含子模式的正则表达式。在PCRE中,子模式包含在圆括号中,$符后接上数字(比如$1,$2)。
比如,下面的命令会将‘img*NNNN.jpeg’变成‘dan*NNNN.jpg’。
```
# rename -v 's/img_(d{4}).jpeg$/dan_$1.jpg/' *.jpeg
```
```
img_5417.jpeg renamed as dan_5417.jpg
img_5418.jpeg renamed as dan_5418.jpg
img_5419.jpeg renamed as dan_5419.jpg
img_5420.jpeg renamed as dan_5420.jpg
img_5421.jpeg renamed as dan_5421.jpg
```
比如,下面的命令会将‘img_000NNNN.jpeg’变成‘dan_NNNN.jpg’。
```
# rename -v 's/img_d{3}(d{4}).jpeg$/dan_$1.jpg/' *jpeg
```
```
img_0005417.jpeg renamed as dan_5417.jpg
img_0005418.jpeg renamed as dan_5418.jpg
img_0005419.jpeg renamed as dan_5419.jpg
img_0005420.jpeg renamed as dan_5420.jpg
img_0005421.jpeg renamed as dan_5421.jpg
```
上面的例子中,子模式‘d{4}’会捕捉4个连续的数字,捕捉的四个数字就是$1, 将会用于新的文件名。
via:
译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
---
本文转载来自 Linux 中国: https://github.com/Linux-CN/archive