试图将目录中的所有文件重命名为$arg[1] + number of file
例如,这些文件:

gfdgfdh.jpg
fgdsyugfs.jpg
gfyudsfuds.jpg

当我在命令行执行sh myscript.sh dog时,将变成以下内容:
dog0.jpg
dog1.jpg
dog2.jpg

这是我到目前为止的代码,regex可以工作,因为如果它从命令行对一个文件尝试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.

最佳答案

这个错误是由于您将$PREFIX放在''中而导致的,它不展开它,而是将它传递给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

关于linux - linux命令行使用提供的参数重命名所有文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11181796/

10-16 20:41