1

ディレクトリ内のすべてのファイルの名前を に変更しようとしています$arg[1] + number of file

たとえば、次のファイル:

gfdgfdh.jpg  
fgdsyugfs.jpg  
gfyudsfuds.jpg  

sh myscript.sh dogコマンドラインで行うと次のようになります。

dog0.jpg
dog1.jpg
dog2.jpg

これが私がこれまでに持っているコードですrename。コマンドラインから1つのファイルでコマンドを試行すると機能するため、正規表現は機能します。

#! /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

このエラーは、 を展開せずに Perl プログラムに渡し、パターンを Perl コードとして評価しているように見える$PREFIXという事実によって発生します。''rename

あなたのスクリプトのもう一つの間違いは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 に答える