폴더의 파일 이름을 순차 번호로 바꾸기


230

디렉토리의 파일 이름을 순차적 번호로 바꾸고 싶습니다. 파일 생성 날짜를 기준으로합니다.

예를 들어, sadf.jpg0001.jpg, wrjr3.jpg0002.jpg등등, 파일의 총 금액 (필요하지 않은 경우 추가 제로에 대한 필요)에 따라 선행 0의 수.


나는 stackoverflow.com/questions/880467/…을 보고 있었지만 나를 위해 일할 수는 없습니다.
Gnutt

1
Linux / Unix는 생성 날짜를 저장하지 않습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1
LS-1TR | 이름 바꾸기 -v의 /.*/ 우리의 $ 내가; 경우 {$ I = 1;}의 sprintf ( "%의 04d.jpg"++ 난을 $) / E (I를 $!) '
있는 no

답변:


313

루프 letprintf패딩에 사용하십시오.

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

-i플래그를 사용하면 기존 파일을 자동으로 덮어 쓰지 않습니다.


4
printf -v new "%04d.jpg" ${a}값을 변수에 넣을 수도 있습니다 . 그리고 ((a++))변수를 증가시키기 위해 작동합니다. 또한 이것은 생성 날짜 순서로 수행하지 않거나 OP가 지정한 패딩을 최소화하지 않습니다. 그러나 Linux / Unix는 작성 날짜를 저장하지 않습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

3
내 bash 환경에서 작동하려면 mv를 큰 따옴표로 묶어야했습니다. mv "$ {i}" "$ {new}"
게리 토만

2
Cygwin 일 수 있습니다 (단말기 동작은 일반적인 Unix 쉘과 거의 동일하지만) 파일 이름에 공백이 있으면 문제가있는 것 같습니다.
Geesh_SO

2
mv -- "$i" "$new"대시로 시작하는 소스 파일 이름을 올바르게 처리하는 데 사용 하는 것이 좋습니다 . 그대로, mv이러한 파일 이름을 플래그 모음으로 구문 분석하려고 시도합니다.
Charles Duffy

2
한 번에 약 800 개의 파일을 잃어 버렸습니다. 나는 -i대답에 포함되어야하며 그에 따라 메모를 다시 작성해야 한다고 생각 합니다. 더 안전합니다. :(
KrIsHnA

269

한 줄의 아름다움 :

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

당신은 변경할 수 .ext.png, .jpg


4
legend :), 나는 이것을 Windows의 git shell에서 사용했다. ^^.
Mr.K

4
잘 작동합니다. 한 줄의 아름다움. 마지막 수정 시간까지 파일을 얻는 ls -tr을 추가했습니다.
Ranjith Siji

32
이 같은 printf와 추가 : ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; done제로 패딩 번호를 가지고
웨린 Niemiec

8
경고 : -n실수로 파일을 덮어 쓰지 않도록 mv 명령에 추가 할 수 있습니다 . 이 어려운 방법을 발견했습니다!
이안 댄포스

4
이 답변에 대한 의견과 다른 사람에서 함께 멋진 아이디어를 퍼팅 : ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done 결과 : (1 것은) 나중에 나중에 인덱스 파일, 수정의 순서로 정렬; (2) 디렉토리를 무시하고 재귀 적이 지 않습니다. (3) 패드 인덱스; (4) 원래 확장을 유지합니다.
Jorge

63

나는 단순성에 대한 gauteh의 솔루션을 좋아하지만 중요한 단점이 있습니다. 수천 개의 파일에서 실행하면 "인수 목록이 너무 깁니다"라는 메시지가 표시되고 ( 더 자세한 내용은이 스크립트에서) 스크립트가 실제로 느려질 수 있습니다. 필자의 경우 약 36.000 파일에서 실행하면 스크립트가 약 이동했습니다. 초당 1 개의 아이템! 왜 이런 일이 발생하는지 잘 모르겠지만 동료로부터 얻은 규칙은 " find당신의 친구" 였습니다.

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

아이템을 세고 명령을 빌드하기 위해 gawk 가 사용되었습니다. 그러나 주요 차이점에 유의하십시오. 기본적 find으로 현재 디렉토리 및 해당 서브 디렉토리에서 파일을 검색하므로 필요한 경우 현재 디렉토리에서만 검색을 제한 man find하십시오 (방법을 보는 데 사용 ).


7
NR더 짧은 명령에 행 번호를 사용하도록 수정했습니다 . gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
Apiwat Chantawibul

12
대규모 보안 취약점이 여기에 있습니다. 라는 파일이 있는지 생각해보십시오 $(rm -rf /).jpg.
Charles Duffy

Charles를 지적 해 주셔서 감사합니다. 안전한 해결책을 제안 할 수 있습니까?
beibei2

2
파일 이름에 공백이있는 경우 분류됩니다. 소스 파일 이름 주위에 따옴표를 사용하십시오. printf "mv \"% s \ "% 04d.jpg \ n", $ 0, a ++
baskin

1
for루프는 엄밀히 말하면, 파일 당 1 초 복용하지 않습니다. 파일 시스템에서 36,000 개의 파일 이름을 가져 오는 데 시간이 오래 걸리고 합리적으로 빠르게 반복됩니다. 많은 파일 시스템은 어떤 정확한 명령을 실행하든 큰 디렉토리에 문제가 있습니다. 그러나 일반적으로 일치하는 파일 목록 find을 가져 와서 정렬 해야하므로 쉘 와일드 카드보다 빠릅니다 .
tripleee

30

"이름 바꾸기"명령으로

rename -N 0001 -X 's/.*/$N/' *.jpg

또는

rename -N 0001 's/.*/$N.jpg/' *.jpg

32
rename(Linux Mint 13)에는 -N옵션 이 없습니다 .
Luke H

내가 이름 바꾸기 명령의 언급만을위한 찬성 투표 수, 나는 그것을 들어 본 적이없는
user907860

8
-N 옵션을 사용하여 이름 바꾸기 명령을 얻는 위치를 알고 싶습니다. 내 우분투 14.04에는 없습니다.
Stephan Henningsen

1
나는 그 rename명령을 좋아 하지만 결코 알지 못했습니다 -N! 감사!
Dan Lecocq

1
알려진 세 가지 다른 도구가 있습니다rename . @Bostrot에 의해 게시 된 링크는 또 다른 이름 바꾸기 도구이며 @RomanRhrnNesterov가 그 이름을 사용한 것처럼 보입니다. ¶ renamePeder Stray와 Larry Wall ( debian / ubuntu의 perl-rename패키지와 arch linux의 패키지) 의 모든 사용자에게 rename: $N스스로 정의 할 수 있습니다 :perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
Socowi

30

OSX에서 Pero 솔루션을 사용하려면 약간의 수정이 필요했습니다. 나는 사용했다 :

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

참고 : 백 슬래시는 줄 연속을 위해 존재합니다

2015 년 7 월 20 일 수정 : 공백이있는 파일 이름을 지원하기 위해 명령 의 \"%s\"인수 를 인용하기 위해 @klaustopher의 피드백을 통합했습니다 mv.


3
Pero의 솔루션과 마찬가지로 여기에는 보안 취약점이 있습니다. 라는 파일이 있는지 생각해보십시오 $(rm -rf /).jpg.
Charles Duffy

고마워, 이것은 작동합니다. 그러나에 첫 번째 인수를 인용해야합니다 mv. ie라는 파일이 some thing.jpg있으면 스크립트가 실패합니다. 이것이 내가 사용한 것입니다 :find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
klaustopher

-maxdepth 1미안보다 안전하는 것이 낫기 때문에 현재 디렉토리의 jpg에서만 작동 하는 데 사용 합니다.
Peter Perháč

파이프 문자를 이전 줄의 끝으로 이동하면 백 슬래시가 필요하지 않습니다.
tripleee

ls -1 *.jpg찾기 대신 사용할 수 있습니다 . 그렇지 않으면 정렬되지 않습니다. 또는 |sort|awk 전
JPT

28

원래 확장을 유지하고 선행 0을 추가하며 OSX에서도 작동하는 매우 간단한 bash 하나의 라이너

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

http://ubuntuforums.org/showthread.php?t=1355021의 단순화 된 버전


정확히 내가 찾던 것. 시작 색인을 설정할 수 있기를 바랍니다.
Jack Vial

2
파일 의 원래 순서 는 유지되지 않습니다 .
Roy Shilkrot 2016 년

@RoyShilkrot 무엇을 의미합니까» 원래 주문을 유지하지 않습니다 «? bash 및 기타 posix 쉘의 글로브는 시스템의 로케일에 따라 정렬 된 순서로 확장됩니다. 물론 이것은 9.ext이전 11.ext에 정렬되지 않지만 다른 도구 (와 같은 ls)는 그렇게하지 않습니다.
Socowi

11

모든 상황에서 작동하려면 이름에 공백이있는 파일에 \ "를 넣으십시오.

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash

3
실제로 모든 상황을 다루지는 않습니다. 리터럴 따옴표를 포함하는 파일 이름은 사소하게 벗어날 수 있습니다. 작은 따옴표 대신 큰 따옴표를 사용하고 있기 때문에 확장 $(rm -rf /)은 여전히 ​​유효합니다.
Charles Duffy

11

rename지원하지 않는 경우 -N다음과 같이 할 수 있습니다.

ls -1 -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'

편집 주어진 숫자로 시작하려면 아래의 (어떤 못생긴 것처럼 보이는) 코드를 사용하고 123을 원하는 숫자로 바꾸십시오.

ls -1 -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'

생성 시간순으로 파일을 나열한 다음 (가장 먼저 -r정렬하려면 ls에 추가 )이 파일 목록을 보내 이름을 바꿉니다. 이름 바꾸기는 정규식에서 perl 코드를 사용하여 카운터를 형식화하고 증가시킵니다.

그러나 EXIF ​​정보가 포함 된 JPEG 이미지를 다루는 경우 권장합니다. exiftool

이것은에서입니다 exiftool 문서 "이름 바꾸기 예"에서,

   exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir

   Rename all images in "dir" according to the "CreateDate" date and time, adding a copy number with leading '-' if the file already exists ("%-c"), and
   preserving the original file extension (%e).  Note the extra '%' necessary to escape the filename codes (%c and %e) in the date format string.

rename?를 사용하여 특정 번호에서 어떻게 시작할 수 있습니까?
Jan

6

OSX 에서 Homebrew의 이름 바꾸기 스크립트를 설치하십시오.

brew install rename

그러면 정말 말도 안되게 쉽게 할 수 있습니다.

rename -e 's/.*/$N.jpg/' *.jpg

또는 멋진 접두사를 추가하려면 다음을 수행하십시오.

rename -e 's/.*/photo-$N.jpg/' *.jpg

3
훌륭한 스크립트이며 Perl에만 의존합니다. brew는 mac 에서만 작동하지만 github ( github.com/ap/rename ) 에서 가져와 Linux 또는 Windows에서 사용할 수 있습니다.
Tim Danner

3
이것은 나를 위해 작동하지 않습니다. 내가 도착Global symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
Anthony Chung

Mac 사용자는 @TimDanner로 연결된 이름 바꾸기 응용 프로그램이 이식성이 뛰어나므로 Zip 아카이브를 다운로드하는 것만 큼 쉽게 이름 바꾸기 유틸리티를 내 bash 프로필 경로가 설정되어있는 디렉토리에 놓았습니다. , 그것은 상자에서 바로 작동합니다. MacPorts에서 사용할 수 없다는 것에 놀랐습니다. 이름 바꾸기 (2)에 대한 BSD 맨 페이지가있는 것이 너무 이상하다고 생각하지만 이름 바꾸기를 실행하면 명령이 존재하지 않습니다. 그림을 이동.
adamlogan

2

모든 파일 이름을 순서대로 바꾸고 소문자 확장자를 따르는 명령을 따르십시오.

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *

1

비슷한 문제가 있었고 그 이유로 쉘 스크립트를 작성했습니다. 나는 누군가에게 도움이 될 수 있다고 생각하기 때문에 많은 좋은 답변이 이미 게시되어 있음에 관계없이 게시하기로 결정했습니다. 자유롭게 개선하십시오!

수리하다

@Gnutt 원하는 동작은 다음을 입력하여 얻을 수 있습니다.

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

옵션 -r을 생략하면 리밍 만 시뮬레이션됩니다 (테스트에 도움이 됨).

otion L은 대상 번호의 길이를 나타냅니다 (앞의 0으로 채워짐) -p <prefix> -s <suffix>. 옵션으로 접두사 / 접미사를 추가 할 수도 있습니다 .

누군가 번호가 매기기 전에 파일을 숫자로 정렬하려면 -o modtime옵션을 제거하십시오 .


1
a=1

for i in *.jpg; do
 mv -- "$i" "$a.jpg"
 a=`expr $a + 1`
done

1

우리는이 파일들이 생성 순서대로 나열된 디렉토리에 있다고 가정합시다.

a.jpg
b.JPG
c.jpeg
d.tar.gz
e

그런 다음 ls -1cr위의 목록을 정확하게 출력합니다. 그런 다음 사용할 수 있습니다 rename:

ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'

어떤 출력

rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)

확장자가없는 파일에 대해서는 "초기화되지 않은 값 사용 […]"경고가 표시됩니다. 당신은 그것을 무시할 수 있습니다.

실제로 이름을 바꾸 -n려면 rename명령 에서 제거하십시오 .

이 답변은 2014 년 4 월 누가의 답변에서 영감을 얻었습니다 . 총 파일 수에 따라 선행 0 수를 설정해야하는 Gnutt의 요구 사항은 무시합니다.


이것은 내가 여기에 가장 유용한 대답이었습니다. 주로 운영 전에 운영을 건식 운영하고 싶었고 ls -1tU제작 시간 으로 변경하여 순서를 조정할 수 있었기 때문 입니다. rename내가 가지고 있지 않은 설치 도 필요했습니다 .
antonyh 2012

1

거의 수정하지 않고 Pero의 솔루션을 다시 사용하십시오. find 하면 주문 항목의 디렉토리 트리를 순회하므로 디렉토리 항목 내에 저장됩니다. 이것은 대부분 같은 머신에서 실행마다 일관되며 삭제가없는 경우 본질적으로 "파일 / 디렉토리 작성 순서"입니다.

그러나 어떤 경우에는이 예제에서 사용되는 논리적 순서 (예 : 이름)를 가져와야합니다.

find -name '*.jpg' | sort -n | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command 

3
이것을 사용하지 마십시오. 이와 같이 bash로 리디렉션하면 큰 보안 위험이 있습니다. 파일 이름 중 하나가 양식 인 경우 blahblah; rm -r * blahblah.jpg어떻게합니까?
xhienne

1

jpg로 제한되는 시간별로 정렬되며 선행 0과 기본 이름 (원하는 경우) :

ls -t *.jpg | cat -n |                                           \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done

(없이 한 줄에 \)


대단한 계획 에서이 페이지의 많은 답변이 끔찍하기 때문에 특히 공감할만한 가치가 없습니다. ls그래도 스크립트에서 사용 하는 모든 것을 공개하는 것을 망설 입니다.
tripleee

나는 깨지기 쉬운 반면, 내가 가지고있는 특정 사용 사례에서 효과가 있었기 때문에 부정적인 대답 에서이 대답을 저장합니다.
Ville

1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

이름 바꾸기 -vn- 테스트 모드를 해제 하기 위해 n 제거

{$ i = 1;} -제어 시작 번호

"% 04d.jpg" -제어 카운트 0 04 및 출력 확장자 .jpg 설정


기본 응답 만 사용하므로이 답변을 취소합니다. 내 사용 사례는 파일의 처음 두 자리를 01에서 시작하는 숫자로 바꾸는 것이 었습니다.rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
minterior

1

나 에게이 답변 조합은 완벽하게 작동했습니다.

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v 1 10 9를 올바르게 주문하는 데 도움이됩니다. 1 9 10 순서, jpg JPG jpeg의 파일 이름 확장명 문제 방지
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'4 자로 시작하고 0을 앞에 붙입니다. mv를 피함으로써 실수로 같은 번호를 사용하여 이미 존재하는 것을 덮어 쓰려고 시도하지 않습니다.
  • bash 실행

@xhienne이 말한 바를 알고, 알 수없는 내용을 bash로 파이프하는 것은 보안 위험입니다. 그러나 스캔 한 사진을 사용하는 경우에는 그렇지 않았습니다.


0

ls를 사용할 수도 있습니다

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash

5
mywiki.wooledge.org/ParsingLs 및 유사하게 깨진 다른 솔루션의 보안 취약점에 대한 설명도 참조하십시오 .
Charles Duffy

1
이것을 사용하지 마십시오. 이와 같이 bash로 리디렉션하면 큰 보안 위험이 있습니다. 파일 이름 중 하나가 양식 인 경우 blahblah; rm -r * blahblah.JPG어떻게합니까?
xhienne

0

다른 솔루션의 대부분은 이미 숫자로 명명 된 기존 파일을 덮어 씁니다. 이는 스크립트를 실행하고 파일을 추가 한 다음 스크립트를 다시 실행하는 경우 특히 문제가됩니다.

이 스크립트는 기존 숫자 파일의 이름을 먼저 바꿉니다.

#!/usr/bin/perl

use strict;
use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]
    or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die "can't opendir $dir: $!";

# First rename any files that are already numeric
while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh))
{
    for my $old (@files) {
        my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
        my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
        close $fh;
        rename "$dir/$old", $new;
    }
}

rewinddir $dh;
my $i;
while (my $file = readdir($dh))
{
    next if $file =~ /\A\.\.?\z/;
    my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
    rename "$dir/$file", sprintf("%s/%04d%s", $dir, ++$i, $ext); 
}

0

이 oneliner는 현재 디렉토리의 모든 파일을 나열하고 생성 타임 스탬프를 역순으로 정렬하며 (가장 오래된 파일이 시작됨을 의미) 파일 양에 필요한 후행 0으로 자동으로 이름을 바꿉니다. 파일 확장자가 유지됩니다.

나는 휴대 전화 사진과 영화를 위해 수년 동안 보통 하나의 폴더 만 가지고 있습니다. 이 명령을 적용하면 내 사진과 동영상이 TV 또는 보관에서 올바른 순서로 슬라이드 쇼를 준비합니다.

파일 이름 충돌이 발생하면 파일이 손실됩니다. 먼저 이상한 이름으로 바꾸고 temp001.jpg최종 파일 이름으로 실행하십시오.

DIGITS=$(ls | wc -l | xargs | wc -c | xargs); ls -tcr | cat -n | while read n f; do mv "$f" "$(printf "%0${DIGITS}d" $n).${f##*.}"; done

1
ls한 번이 아니라 두 번 실행 하면 피하는 것이 좋았지 만 깊이 연구하지 않았습니다.
tripleee

1. 의도적으로 원 라이너를 제안하면 나중에 왜 변경해야합니까? 저와 같은 많은 사용자는 작업을 완료하기 위해 oneliner를 복사하여 붙여 넣기를 선호합니다. 한 줄씩 복사하는 것을 선호하는 다른 사람들에게는이 스레드에 다른 답변이 있습니다. 2. 원래의 질문은 "총 파일 수에 따른 선행 0의 수"였으며 이것은 첫 번째에 의해 수행 ls되므로 두 파일이 필요한 이유는 무엇입니까? 3. 이러한 명령은 원샷이며 스크립트에 포함되지 않기 때문에 사람들이 원 라이너를 선호하는 이유가 있습니다.
Flavio Aiello

1
미안, 그것이 중요하다고 생각하지 않았다. 저에게있어, 코드를 읽을 수 있다는 것은 코드를 한 줄로 복사 / 붙여 넣기하는 능력보다 훨씬 큽니다. Bash가 여러 줄에 걸쳐있는 페이스트에 문제가있는 환경을 찾지 못했지만 뭔가 간과 할 수 있습니다.
tripleee

0

여기 나를 위해 일한 것이 있습니다. 파일 이름에 공백이 포함 된 경우 mv 명령이 공백과 실제 파일 사이에 혼동하지 않도록 rename 명령을
사용 했습니다 .

여기에서 모든 jpg 파일의 파일 이름에서 공백 ''을 '_'로 바꿨습니다.
#! / bin / bash
'y / / _ /'이름 바꾸기 * jpg # 공백을 _로 교체
x = 0으로하자;
*의 경우 i.jpg; do
    x = (x + 1)하자
    mv $ i $ x.jpg
끝난

리눅스 (ubuntu)에 설치 이름 바꾸기, "sudo apt 설치 이름 바꾸기"
rishang bhavsar

0

요즘에는 이름을 바꾸기 위해 여러 파일을 선택한 후 옵션이 있습니다 (터너 파일 관리자에서 보았습니다).

  1. 여러 파일을 선택
  2. 옵션 확인
  3. 이름 바꾸기를 선택하십시오

프롬프트는 특정 디렉토리의 모든 파일과 함께 제공되며 카테고리 섹션을 확인하십시오.


-1

이 스크립트는 Mac OS bash에서 생성 날짜별로 파일을 정렬합니다. 비디오를 대량으로 이름을 바꾸는 데 사용합니다. 확장명과 이름의 첫 부분 만 변경하면됩니다.

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash

1
이것을 사용하지 마십시오. 이와 같이 bash로 리디렉션하면 큰 보안 위험이 있습니다. 파일 이름 중 하나가 양식 인 경우 blahblah; rm -r * blahblah.mp4어떻게합니까?
xhienne

-1

다음은 "이름 바꾸기"명령을 사용하는 다른 솔루션입니다.

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'

선행 0을 복원하려면 다음과 같이하십시오.rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
Camille Goudeseune

DSC_3451.JPG, DSC_3452.JPG 등의 이름을 가진 파일이있는 폴더의 경우 예상대로 작동하지 않습니다. find -name '* .JPG'| 정렬 -Vr | 's / (\ d +) / $ 1 + 1 / ge'이름 바꾸기는 아무 것도 수정하지 않습니다
Tiberiu C.

-2

Pero의 대답은 나를 여기로 데려 갔다 :)

이미지 뷰어가 이미지를 시간 순서대로 표시하지 않았기 때문에 시간에 따라 파일 이름을 바꾸고 싶었습니다.

ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

2
이것을 사용하지 마십시오. 이와 같이 bash로 리디렉션하면 큰 보안 위험이 있습니다. 파일 이름 중 하나가 양식 인 경우 blahblah; rm -r * blahblah.jpg어떻게합니까? 극단적 인 예입니다.
xhienne

-2

이미지 레이블을 지정하기 위해 image Annotator를 사용하는 경우.

$ make qt5py3

$ python3 labelImg.py


-3

한 폴더에있는 파일 6000 개를 다시 번호 매기기 위해 ACDsee 프로그램의 '이름 바꾸기'옵션을 사용할 수 있습니다.

접두사를 정의하려면 다음 형식을 사용하십시오. ####"*"

그런 다음 시작 번호를 설정하고 이름 바꾸기를 누르면 프로그램이 모든 6000 파일의 이름을 일련 번호로 바꿉니다.


1
OP는 Unix Bourne Shell에서 일련의 명령을 요청합니다. Windows 환경에서만 실행되는 상용 제품을 제안하고 있습니다.
크시 엔
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.