1

试图将目录中的所有文件重命名为$arg[1] + number of file.

例如这些文件:

gfdgfdh.jpg  
fgdsyugfs.jpg  
gfyudsfuds.jpg  

当我sh myscript.sh dog在命令行执行时将变为以下内容:

dog0.jpg
dog1.jpg
dog2.jpg

这是我到目前为止的代码,正则表达式有效,因为如果它从命令行尝试rename一个文件上的命令,它就有效。

#! /bin/sh
COUNTER=0
PREFIX=$1
for i in *.jpg
do
        rename 's/.*[^.jpg]/${PREFIX}${COUNTER}/' $i
        COUNTER=COUNTER+1
done

我得到的错误是

Global symbol "$PREFIX" requires explicit package name at (eval 1) line 1.
4

3 回答 3

4

该错误是由于您将其放入$PREFIXinside引起的'',它不会扩展它,而是将其传递给 Perl 程序rename,而 Perl 程序又似乎将模式评估为 Perl 代码。

您的脚本中的另一个错误是COUNTER=COUNTER+1. 外壳不能那样工作。试试这个(未经测试):

#!/bin/sh
prefix=$1

count=0
for f in *.jpg; do
    mv "$f" "$prefix$count".jpg
    count=`expr $count + 1`
done
于 2012-06-24T22:57:32.893 回答
1

rename 接受 perl 程序/表达式,在您的情况下, $PREFIX 被解释为变量。

rename 是一个批量重命名文件的工具,你用它来重命名一个文件。更好的方法是:

PREFIX=dog; 
rename  "s#[^/]*.jpg#'$PREFIX' . \$main::C++ . '.jpg'#e" tmp/*.jpg
于 2012-06-25T00:20:39.757 回答
0

使用“重命名”命令

rename 's/.*/dog$N.jpg/' *.jpg
于 2014-02-04T15:50:01.850 回答