Perl의 이름 바꾸기를 사용하여 특정 값부터 시작하여 파일 목록 번호를 다시 매깁니다.

Perl의 이름 바꾸기를 사용하여 특정 값부터 시작하여 파일 목록 번호를 다시 매깁니다.

파일 이름의 특정 지점에 4자리 숫자로 구성된 인덱스가 있는 파일 목록의 번호를 다시 매기려고 합니다. 이러한 파일은 항상 0001에서 출력을 시작하지만 1001부터 시작해야 합니다.

  • ./file_name.0001.jpg~해야 한다./file_name.1001.jpg
  • ./file_name.0734.jpg~해야 한다./file_name.1734.jpg
  • 등.

나는 이것을 접했지만 renamePerl에 익숙하지 않습니다. 예를 개선하면 다음과 같이 작동할 것이라고 생각합니다.

rename -n 's/\d{4}/our $i //= 1001; ++$i/e' -- *.jpg

불행히도, 증가할 때쯤에는 $i를 잊어버린 것 같습니다.

Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at (user-supplied code).

파일 이름을 이미 존재하는 이름으로 바꾸는 것도 안전하지 않지만 어디로 갈지는 모르겠습니다.

답변1

여기서는 숫자에 1000을 더할 수 있어야 하는 것 같습니다.

rename -n -- 's/\d{4}/$& + 1000/e' *.jpg

에서는 일치 \d{4}합니다 . 4자리 이상의 시퀀스를 일치시키려면 다른 숫자로 둘러싸여 있지 않은지 확인해야 합니다 .12341234567\d{4}

rename -n -- 's/(?<!\d)\d{4}(?!\d)/$& + 1000/e' *.jpg

특히 문제는 /구분 기호를 사용 s하고 /교체 내부에서 사용한다는 것입니다. 대체에 코드가 포함된 경우 s{pattern}{replacement}flagsSubstitute 를 좋아 s/pattern/replacement/flags하지만 언제든지 다음과 같은 다른 역할을 사용할 수 있습니다.s:pattern:replacement:flags

rename -n -- 's{\d{4}}{our $i //= 1000; ++$i}e' *.jpg

아마도 더 나은 대안은 이름을 바꾸기 전에 온전한지 확인하는 이점이 있는 's 를 rename사용하는 것입니다 .zshzmv

autoload -Uz zmv
i=1000; zmv -n '(*)[0-9](#c4)(*.jpg)' '$1$((++i))$2'

또는 4개 이상의 숫자를 찾으세요:

i=1000; zmv -n '(|*[^0-9])[0-9](#c4)(([^0-9]*|).jpg)' '$1$((++i))$2'

또는 숫자에 1000을 추가하십시오.

zmv -n '(*)([0-9](#c4))(*.jpg)' '$1$(($2 + 1000))$3'

<0-999>1, 01, 0001, 000000001...을 포함하여 0에서 999 사이의 숫자를 나타내는 일련의 숫자 와 일치합니다. (<0-999>~^[0-9](#c4))0부터 999까지의 4자리 숫자와 일치합니다.

관련 정보