我正在尝试编写一个 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
匹配以(.*)
结尾的所有内容,然后添加并打印匹配的组(这意味着使用其反向引用打印匹配的组),然后打印扩展名。命令针对所有文件运行。$
.jpg
prefix_
$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