1

我正在尝试编写一个 bash shell 脚本来将一堆照片重命名为我自己的编号系统。所有图像文件名都类似于“IMG_0000.JPG”,我可以使用以下 Perl-regex 代码让脚本匹配和重命名(覆盖)所有照片:

#!/bin/bash
rename -f 's/\w{4}\d{4}.JPG/replacement.jpg/' *.JPG;

但是当我尝试使用变量作为替换的名称时,正如我在其他帖子和互联网上其他地方看到的那样,没有任何反应:

#!/bin/bash
$replacement = "000.jpg";
rename -f 's/\w{4}\d{4}.JPG/$replacement/' *.JPG;

如何让这样的变量在我的 bash 脚本中正常工作?(注意:我不想简单地从文件名中删除“IMG_”)

4

2 回答 2

1

从单引号中取出替换:

#!/bin/bash
$replacement="000.jpg"
rename -f 's/\w{4}\d{4}.JPG/'$replacement'/' *.JPG

Bash 不检查单引号字符串的插值。

于 2013-06-09T22:21:39.420 回答
0

使用双引号和正确的变量赋值:

#!/bin/bash
replacement="000.jpg"
rename -f "s/\w{4}\d{4}\.JPG/$replacement/" *.JPG

请注意,这可能会导致麻烦,例如,当重命名两个名称为IMG_0001.JPGFOO_9352.JPG的文件时: 第一个文件将重命名为000.jpg,然后第二个文件也将重命名为000.jpg,覆盖第一个文件。

于 2013-06-09T22:21:44.337 回答