파일 이름을 다른 이름으로 저장하는 방법은 무엇입니까?

파일 이름을 다른 이름으로 저장하는 방법은 무엇입니까?

내 스크립트가 NewNames 목록에서 읽은 다음 새 이름으로 새 파일을 저장하기를 원합니다. 이 이름은 파일 이름의 처음 세 글자와 동일한 세 글자로 시작하는 각 파일에 추가된 카운터가 됩니다.

이것이 내 이전 파일 이름과 새 파일 이름이라고 가정합니다.

파일 이름 목록: A77 A77 A77 A78 A78

listofNewNames: A7701 A7702 A7703 A7801 A7802(예상, listofNewNames는 저장되지 않음)

COUNTER=0
for i in listofFileNames; do
while [$COUNTER -lt 5]
let "COUNTER=COUNTER+01"
done
newName=${oldfilename}${COUNTER}.L2_LAC_OC
done

이것이 내가 지금까지 가지고 있는 것이지만 문자가 변경될 때마다 카운터는 0으로 다시 시작해야 하므로 파일 이름 길이는 결코 5가 될 수 없습니다. 예를 들어 파일 수에 따라 3이 되고 그 다음에는 2가 됩니다.

내가 분명히 밝혔기를 바랍니다. 미리 감사드립니다.

답변1

last_name=""
listofFileNames=(A77 A77 A77 A78 A78)

for name in "${listofFileNames[@]}"; do
        test "$name" != "$last_name" && COUNTER=1
        last_name="$name"
        printf "%s%02d\n" "${name}" "${COUNTER}"
        ((COUNTER++))
done

답변2

확인 해봐:

ListOfFiles=("A77" "A77" "A77" "A78" "A78")
for oldfile in "${ListOfFiles[@]}"; do 
    COUNT=1; 
    while [[ -f "$(printf "%s%02d" ${oldfile} ${COUNT})" ]]; do 
        COUNT=$(($COUNT + 1)) 
    done 
    echo "NewName: $(printf "%s%02d" ${oldfile} ${COUNT})"
    touch "$(printf "%s%02d" ${oldfile} ${COUNT})"
done

현재 스크립트는 다음과 같은 파일 이름을 제공합니다.

NewName: A7701
NewName: A7702
NewName: A7703
NewName: A7801
NewName: A7802

관련 정보