파일 이름을 다음과 같이 오름차순 숫자 형식으로 바꾸고 싶습니다.
04.jpg
05.jpg
06.jpg
그래서 변수 값을 증가시키고 이를 에 전달하는 방법을 생각해 내야 합니다 rename
. 인터넷에서 다음과 같이 지시합니다.
rename -n 'our $i; s/\d+/sprintf("new\/%03d", $i++)/e' *.*
요점은 이것이 어떻게 작동하는지 이해하지 못한다는 것입니다. 지금까지는 이것이 이름 바꾸기를 위해 알 수 없는 변수에 대한 참조를 our $i
전달하는 데 응답할 것이라고 추측할 수 있습니다 . $i
그런 다음 부분적으로 하나를 추가합니다 sprintf("new\/%03d", $i++)
. 이 결론을 바탕으로 나는 다음을 시도하기로 결정했습니다.
i=4
rename -n 'our $i; s/\d+/sprintf("new\/%03d", $i++)/e' *.*
그러나 그것은 실패했습니다. $i
이름 바꾸기가 예상대로 작동 하도록 시작 값을 어떻게 설정합니까 ?
답변1
그리고 zsh
:
autoload zmv
n=0; zmv -n '*.jpg(#qn[1,100])' 'new/${(l[2][0])$((++n))}.jpg'
최대 100개의 JPEG 파일 이름을 바꿀 수 있습니다(목록은 숫자순으로 정렬됨).
( -n
원하는 경우 시험 실행을 위해 삭제하세요).
perl
-based rename
및 기본 셸을 사용하면 비슷한 작업을 수행할 수 있습니다(원본 목록의 숫자 정렬 및 보호 장치 없음 zmv
).
rename -n '
our $i //= 1;
exit if $i > 100;
$_ = sprintf "new/%02d.jpg", $i++' ./*.jpg
rename
perl
을 사용하여 루프의 각 파일에 대해 지정된 코드를 실행합니다 $_
. 코드는 $_
파일의 새 이름으로 변경됩니다.
our $i
범위는 여기에서 정의됩니다 $i
. 당신이 원하지 않는현지의한 파일에서 다음 파일까지 기억하려는 델타 값의 범위입니다 my $i
(자세한 내용 참조).$i
our
perldoc -f our
Perl 구성 s/regexp/replacement/flags
은 $_
. 처음부터 대체 이름을 만드는 경우 여기에는 필요하지 않습니다.
답변2
이것. 시작 인덱스는 첫 번째 매개변수로 제공될 수 있습니다.
perl -le '
my $i=shift;
my $w=length(@ARGV+$i);
-f $_ and
rename($_,sprintf("new/%0${w}d.jpg",$i++))
or die("moving $_:$!")
for @ARGV;
' 4 ./*.jpg
tree -F
산출
Before renaming step...
.
├── food1.jpg
├── food2.jpg
├── food3.jpg
├── food4.jpg
├── food5.jpg
├── food6.jpg
├── food7.jpg
├── food8.jpg
├── food9.jpg
├── infile
├── new/
└── x
After renaming step....
.
├── infile
├── new/
│ ├── 04.jpg
│ ├── 05.jpg
│ ├── 06.jpg
│ ├── 07.jpg
│ ├── 08.jpg
│ ├── 09.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ └── 12.jpg
└── x
답변3
존재하다bash
#!/bin/bash
for f in `find . -type f -name "[0-9]*.jpg" -printf "%f\n" | sort -r`; do
# Take the prefix (01.jpj --> 01)
index="${f%.*}"
# Remove the leading zero if have it
index="${index#0*}"
# add one to the index
index=$((index+1))
# Add again the leading zero if we are under the double
[ "$index" -gt 10 ] || index="0$index"
# Rename
mv "$f" "$index.jpg"
done
또는 동일한 방법이지만 다음을 사용합니다 python3
.
#!/usr/bin/python3
import os
import re
all_file = [ _[:_.index(".")] for _ in os.listdir() if re.match(r'^\d+(?=\.jpg$)', _)]
all_file.sort(reverse=True)
for ftr in all_file:
ni = "0" + str(int(ftr) + 1) if int(ftr) < 9 else str(int(ftr) + 1)
os.rename(ftr + ".jpg", ni + ".jpg")