카운터를 사용하여 BASH 파일 이름 바꾸기 일괄

카운터를 사용하여 BASH 파일 이름 바꾸기 일괄

폴더에 있는 모든 파일의 이름을 다음으로 바꾸고 싶습니다.PREFIX+COUNTER+FILENAME

예를 들어. 입력하다:

england.txt  
canada.txt  
france.txt

산출:

CO_01_england.txt  
CO_02_canada.txt  
CO_03_france.txt

답변1

요청하신 내용은 다음과 같습니다.

n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done

어떻게 작동하나요?

  • n=1

    그러면 변수가 n1로 초기화됩니다.

  • for f in *.txt; do

    그러면 이름이 로 시작하는 현재 디렉터리를 반복하는 루프가 시작됩니다 .txt.

  • mv "$f" "CO_$((n++))_$f"

    이렇게 하면 파일 이름이 카운터로 CO_접두사를 갖도록 변경됩니다. n++기호는 bash에게 변수를 증가시키라고 지시합니다 n.

  • done

    이는 사이클의 끝을 나타냅니다.

개선하다

이 버전에서는 printf이를 사용하여 숫자 형식을 더 효과적으로 제어할 수 있습니다.

n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done

특히 이 형식은 숫자가 여전히 한 자리인 경우 %02i숫자 앞에 0을 붙입니다 .n

답변2

prenameDebian 및 그 파생 제품 또는 Perl 패키지를 설치하여 다른 시스템에서 유틸리티를 사용하십시오 .Unicode::Tussle:

prename 's ([^/]*\z) (sprintf("C0_%02d_%s", ++$n, $&))e' england.txt canada.txt france.txt

설명: 각 매개변수에 대해 기본 이름(슬래시가 없는 가장 긴 접미사)의 이름을 바꾼 다음 소수점 C0_두 자리 숫자(사용 전 증가, 첫 번째 증가 및 사용 전 0부터 시작) 형식의 카운터 값, 그 뒤에 원래 이름. 사전순으로 번호가 매겨진 확장자를 가진 모든 파일의 이름을 바꾸려면:$n_.txt

prename 's ([^/]*\z) (sprintf("C0_%02d_%s", ++$n, $&))e' *.txt

zsh의 경우 다음을 사용하십시오.zmv기능 및매개변수 확장 플래그 l번호를 입력하세요:

autoload -U zmv
zmv '*.txt' '$f:h/C0_${(l:2::0:)$((++x))}_$f:t'

관련 정보