숫자 앞에 0을 추가하려면 파일 이름을 바꾸세요.

숫자 앞에 0을 추가하려면 파일 이름을 바꾸세요.

이름 바꾸기 명령의 예를 여러 번 시도했지만 원하는 작업을 수행하는 구문을 알 수 없습니다.

다음과 같은 라벨이 붙은 파일이 많이 있습니다.

File_Ex_1.jpg
File_Ex_2.jpg
File_Ex_3.jpg
File_Ex_4.jpg
...
File_Ex_10.jpg
File_Ex_11.jpg
etc. 

0파일 이름의 문자 수가 동일하도록 삽입하여 일부를 변경하고 싶습니다 .

그래서 File_Ex_1.jpg가고 싶어 File_Ex_01.jpg, File_Ex_2.jpgFile_Ex_02.jpg

이 작업을 수행하려면 이름 바꾸기 명령을 어떻게 사용할 수 있습니까?

이것rename주문하다통해 설치됩니다스스로 만든맥에서. 출력 rename -v:

rename -v
Usage:
    rename [switches|transforms] [files]

    Switches:

    -0/--null (when reading from STDIN)
    -f/--force or -i/--interactive (proceed or prompt when overwriting)
Wide character in print at /System/Library/Perl/5.18/Pod/Text.pm line 286.

    -g/--glob (expand "*" etc. in filenames, useful in Windows™ CMD.EXE)
    -k/--backwards/--reverse-order
    -l/--symlink or -L/--hardlink
    -M/--use=*Module*
    -n/--just-print/--dry-run
    -N/--counter-format
    -p/--mkpath/--make-dirs
    --stdin/--no-stdin
    -t/--sort-time
    -T/--transcode=*encoding*
    -v/--verbose

    Transforms, applied sequentially:

    -a/--append=*str*
    -A/--prepend=*str*
    -c/--lower-case
    -C/--upper-case
    -d/--delete=*str*
    -D/--delete-all=*str*
    -e/--expr=*code*
    -P/--pipe=*cmd*
    -s/--subst *from* *to*
    -S/--subst-all *from* *to*
    -x/--remove-extension
    -X/--keep-extension
    -z/--sanitize
    --camelcase --urlesc --nows --rews --noctrl --nometa --trim (see manual)

답변1

이것을 사용해 보세요:

rename -e 's/\d+/sprintf("%02d",$&)/e' -- *.jpg

예:

$ ls
Device_Ex_10.jpg  Device_Ex_1.jpg  Device_Ex_4.jpg  Device_Ex_7.jpg
Device_Ex_11.jpg  Device_Ex_2.jpg  Device_Ex_5.jpg  Device_Ex_8.jpg
Device_Ex_12.jpg  Device_Ex_3.jpg  Device_Ex_6.jpg  Device_Ex_9.jpg
$ rename -e 's/\d+/sprintf("%02d",$&)/e' -- *.jpg
$ ls
Device_Ex_01.jpg  Device_Ex_04.jpg  Device_Ex_07.jpg  Device_Ex_10.jpg
Device_Ex_02.jpg  Device_Ex_05.jpg  Device_Ex_08.jpg  Device_Ex_11.jpg
Device_Ex_03.jpg  Device_Ex_06.jpg  Device_Ex_09.jpg  Device_Ex_12.jpg

나는 여기에서 참조를 가져 왔습니다. https://stackoverflow.com/questions/5417979/batch-rename-series-files-by-padding-with-zeroes

여기서는 특정 rename구현에 맞게 조정하세요.

답변2

사용 중인 것으로 보이는 이름 바꾸기 버전을 사용하여 다음 표현식은 요청한 변환을 수행해야 합니다(라는 이름의 파일이 포함된 디렉터리의 예 File_Ex_{1..11}.jpg).

$ rename -n -e 's/_(\d\.)/_0$1/g' -- *.jpg
'File_Ex_1.jpg' would be renamed to 'File_Ex_01.jpg'
'File_Ex_2.jpg' would be renamed to 'File_Ex_02.jpg'
'File_Ex_3.jpg' would be renamed to 'File_Ex_03.jpg'
'File_Ex_4.jpg' would be renamed to 'File_Ex_04.jpg'
'File_Ex_5.jpg' would be renamed to 'File_Ex_05.jpg'
'File_Ex_6.jpg' would be renamed to 'File_Ex_06.jpg'
'File_Ex_7.jpg' would be renamed to 'File_Ex_07.jpg'
'File_Ex_8.jpg' would be renamed to 'File_Ex_08.jpg'
'File_Ex_9.jpg' would be renamed to 'File_Ex_09.jpg'

-n( 실제로 이름 바꾸기를 수행하려면 플래그를 제거하십시오 .)

인수는 -ePerl 검색 및 교체 표현식입니다. 이는 _(\d\.)am 밑줄과 일치하고 숫자, 점이 뒤따르고 밑줄을 로 대체하여 _0앞에 0을 삽입합니다. $1괄호로 묶인 그룹(숫자 및 점)에 대한 역참조이며 새 파일 이름에서는 변경되지 않습니다.

답변3

명령을 통해 수행할 수 있지만 prenamePython 대안을 제공하고 싶습니다.

$ ls
File_Ex_1.jpg  File_Ex_2.jpg  File_Ex_3.jpg  File_Ex_4.jpg

$ ./pad_zeros.py *                                                                                                       

$ ls
File_Ex_01.jpg  File_Ex_02.jpg  File_Ex_03.jpg  File_Ex_04.jpg  pad_zeros.py*

스크립트는 pad_zeros.py간단합니다.

#!/usr/bin/env python
import sys,os,re

for file in sys.argv[1:]:
    if __file__ in file: continue
    words = re.split('_|\.',file)
    words[-2] = words[-2].zfill(2)
    new_name = "_".join(words[:-1]) + "." + words[-1]
    os.rename(file,new_name)

명령줄에서 인수를 가져와 반복하고 .zfill()명령을 사용하여 인수를 0(이 경우 두 문자)으로 채웁니다. 동일한 폴더의 모든 파일을 작업하고 있으므로 glob-star를 사용할 수 있습니다.

답변4

위의 답변 중 하나는 다음과 같습니다.

rename -e 's/\d+/sprintf("%02d",$&)/e' -- *.jpg

그러나 *.jpg 파일은 엄격한 숫자 순서로 정렬되기 때문에 이는 잘못된 결과를 제공합니다. rename깃발을 들고 리허설을 진행하면 -n다음과 같은 결과가 나옵니다.

rename(9999.jpg, frames_0000039996.jpg) 
rename(999.jpg, frames_0000039997.jpg) 
rename(99.jpg, frames_0000039998.jpg) 
rename(9.jpg, frames_0000039999.jpg)

올바른 결과는 다음을 통해 얻을 수 있습니다.

rename 's/.+/our $i; sprintf("frames_%010d.jpg", 0+$i++)/e' $(ls -1 | sort -V)

이것은 만든다

rename(9999.jpg, frames_0000039996.jpg)
rename(999.jpg, frames_0000039997.jpg)
rename(99.jpg, frames_0000039998.jpg)
rename(9.jpg, frames_0000039999.jpg)

플래그 와 함께 -n.

관련 정보