2014-10-01 5 views
0

error_ *로 시작하는 파일이 여러 개 있습니다. 특정 이름을 가진 파일의 이름을 모두 바꾸려고합니다. 나는 그것을하기 위해 아래의 스크립트를 사용하고 있지만 작동하지 않습니다. 내가특정 문자로 시작하는 파일의 이름을 AIX의 특정 이름으로 바꿉니다.

error_CO_5010wgs837in.10 
error_CO_coprofo.7 

의 이름을 바꾸려면

counter=1 
for i in `ls error*` 
do 
    mv $i ABC$counter_$i 
    $((counter++)) 
done 

샘플 파일 나는 파일의 각 이름을 변경하면서 내가 그것을 잘 작동 카운터를 사용하지 않는 경우, 카운터 값을 사용하고 싶습니다. 아래

ABCerror_CO_5010wgs837in.10 
ABCerror_CO_coprofo.7 

내가 기대하고 출력입니다 :하지만 난 work.here하지 않습니다 위의 스크립트 내 스크립트가 제공되는 출력 이유를 알고 싶어

ABC1_error_CO_5010wgs837in.10 
ABC2_error_CO_coprofo.7 
+0

'$ ((카운터 ++))':'달러'는 필요하지 않습니다. – kev

+0

그래도 달러없이 시도했지만 예상 결과가 아닙니다. –

+0

'shell '은'((VAR ++))'구문을 지원하지 않을 수도 있습니다 – kev

답변

2

당신은 $counter_을 사용하면 변수 counter_을 찾습니다. counter을 변수로 지정하고 _도 지정하려면 ${counter}_을 사용하십시오.

이 작동합니다 :

#!/bin/bash 

# to avoid error* match exactly error* if does not expand to any result 
shopt -s nullglob 

counter=1 
for i in error* 
do 
     echo "mv $i ABC${counter}_$i" #now it is echo; change to mv once you tested it works 
     counter=$((counter+1)) 
done 

변수를 증가하는 다양한 방법을 참조하십시오 How to increment a variable in bash?합니다.

관련 문제