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