linux命令行使用提供的参数重命名所有文件

时间:2012-06-24 22:45:54

标签: linux bash shell

尝试将目录中的所有文件重命名为$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.

3 个答案:

答案 0 :(得分:4)

错误是由于您将$PREFIX置于''内而未展开,但将其传递给Perl程序rename,这反过来似乎是将模式评估为Perl代码。

脚本中的另一个错误是COUNTER=COUNTER+1。 shell只是不起作用。试试这个(未经测试):

#!/bin/sh
prefix=$1

count=0
for f in *.jpg; do
    mv "$f" "$prefix$count".jpg
    count=`expr $count + 1`
done

答案 1 :(得分:1)

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

重命名是批量重命名文件的工具,您使用它来仅重命名文件。更好的方法是:

PREFIX=dog; 
rename  "s#[^/]*.jpg#'$PREFIX' . \$main::C++ . '.jpg'#e" tmp/*.jpg

答案 2 :(得分:0)

使用“重命名”命令

rename 's/.*/dog$N.jpg/' *.jpg