在 Perl 脚本的文件中添加前缀名称

在 Perl 脚本的文件中添加前缀名称

我正在尝试编写一个 perl 脚本来在文件(约 100 个文件)上添加前缀名称,但是我未能完成。

我所指的例子:

abc.jpg change to NYear_abc.jpg     
def.jpg change to NYear_def.jpg    
ghi.jpg change to NYear_ghi.jpg

这是我尝试搜索并写下的内容:

#!/usr/bin/perl 
for (filename in "*".jpg;)
do {rename "$filename" "prefix_$filename";}

它显示缺少操作员,有人可以帮忙吗?

答案1

我不知道 perl 语法和 perl 脚本,但我可以帮助您使用rename以下命令重命名所有 .jpg 文件:

首先,您必须切换包含所有 .jpg 文件的目录。例如,如果文件存储在中/home/star1017/jpg-file,我输入如下内容:

cd /home/star1017/jpg-file

然后运行

rename -n 's/(.*)\.jpg$/prefix_$1.jpg/' *.jpg

匹配以(.*)结尾的所有内容,然后添加并打印匹配的组(这意味着使用其反向引用打印匹配的组),然后打印扩展名。命令针对所有文件运行。$.jpgprefix_$1*.jpg

测试:

file01.jpg renamed as prefix_file01.jpg
file02.jpg renamed as prefix_file02.jpg
file03.jpg renamed as prefix_file03.jpg
file04.jpg renamed as prefix_file04.jpg
file05.jpg renamed as prefix_file05.jpg

或者,如果您不想切换到该目录,请运行以下命令:

rename -n 's/(.*)\/(.*)\.jpg$/$1\/prefix_$2.jpg/' /home/star1017/jpg-file/*.jpg

最后,如果您确保测试,请删除-n对实际文件进行实际重命名的选项。

答案2

您想要一个 perl 脚本,这是您的 Perl 脚本;)

#!/usr/bin/perl
use strict;
use warnings;

foreach $_ (@ARGV) {
   rename($_, "NYear_$_");
}

假设脚本的名称为foo,以以下内容开头

./foo *.jpg

例子

% ls *.jpg
abc.jpg  def.jpg  ghi.jpg

% ./foo *.jpg

% ls *.jpg   
NYear_abc.jpg  NYear_def.jpg  NYear_ghi.jpg

答案3

当然,还有惯用的 perl 单行代码:

$ ls *jpg
abc.jpg  def.jpg  ghi.jpg
$ perl -e 'rename($_, "NYear_$_") foreach @ARGV' *jpg
$ ls *.jpg   
NYear_abc.jpg  NYear_def.jpg  NYear_ghi.jpg

相关内容