폴더의 파일 이름을 순차 번호로 변경
디렉터리에 있는 파일의 이름을 순차적인 번호로 변경합니다.파일 생성 날짜를 기준으로 합니다.
: 예들면sadf.jpg
0001.jpg
,wrjr3.jpg
0002.jpg
파일의 총 양에 따라 선행 0의 수(필요하지 않은 경우 추가 0이 필요하지 않음).
한 줄의 아름다움:
ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done
을 변경할 수 ..ext
와 함께.png
,.jpg
타기.
루프를 사용해 보세요.let
,그리고.printf
패딩의 경우:
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
파일을 으로 덮어쓰는 하며, 플그는기파자덮로동어는쓰것사다을니용방합을 사용합니다.--
예방합니다.mv
대시가 있는 파일 이름을 옵션으로 해석합니다.
저는 단순성 때문에 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
항목 수를 세고 명령을 빌드하기 위해 가우크를 사용했습니다.하지만 주요 차이점에 주목하세요.기본적으로find
하위 을 제한해야 (" 현재디와사로므", "검하색에서만검오리시제십색하한용을디현경렉" 사용).man find
방법을 확인합니다.
원래 확장자를 유지하고 선행 0을 추가하며 OSX에서도 작동하는 매우 간단한 bash one 라이너:
num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done
http://ubuntuforums.org/showthread.php?t=1355021 의 단순화된 버전
OSX에서 페로의 솔루션을 사용하려면 약간의 수정이 필요했습니다.사용:
find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash
참고: 백슬래시는 라인 계속을 위해 있습니다.
2015년 7월 20일 편집: @klaustoper의 피드백을 인용하기 위해 통합되었습니다.\"%s\"
의 mv
공백이 있는 파일 이름을 지원하는 명령입니다.
"command" 명령을 사용하여
rename -N 0001 -X 's/.*/$N/' *.jpg
또는
rename -N 0001 's/.*/$N.jpg/' *.jpg
모든 상황에서 작업하려면 이름에 공백이 있는 파일의 경우 \"를 입력합니다.
find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
OSX에서 Homebrew에서 이름 바꾸기 스크립트를 설치합니다.
brew install rename
그러면 정말 터무니없이 쉽게 할 수 있습니다.
rename -e 's/.*/$N.jpg/' *.jpg
또는 적절한 접두사를 추가하려면:
rename -e 's/.*/photo-$N.jpg/' *.jpg
메모 에는 여서이바꾸명다같습다니음과가 포함됩니다.-n
이름을 미리 볼 수 있습니다.바꾸기를 하려면 이변경실수다제음다거니합을면려행하제로름을을 합니다.-n
만약 당신이rename
하지 -N
다음과 같은 작업을 수행할 수 있습니다.
ls -1 --color=never -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'
메모 여기서 이름 바꾸기 명령에는 다음이 포함됩니다.-n
이름을 미리 볼 수 있습니다.바꾸기를 하려면 이변경실수다제음다거니합을면려행하제로름을을 합니다.-n
편집 지정된 숫자로 시작하려면 아래의 (약간 보기 흉한) 코드를 사용할 수 있습니다. 123을 원하는 숫자로 바꾸기만 하면 됩니다.
ls -1 --color=never -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'
은 작성 시간 시간, 시간) 합니다.-r
tools to reverse sort)를 선택한 다음 이름을 바꿀 파일 목록을 보냅니다.이름 바꾸기는 정규식의 펄 코드를 사용하여 카운터를 포맷하고 증분합니다.
하지만 EXIF 정보가 있는 JPEG 이미지를 다루는 경우에는exiftool
이는 "예명 변경"에 있는 exift 도구 설명서의 내용입니다.
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 --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *
find . | grep 'avi' | nl -nrz -w3 -v1 | while read n f; do mv "$f" "$n.avi"; done
find .
폴더 및 하위 폴더에 있는 모든 파일을 표시합니다.
grep 'avi'
.vi 에서 .
nl -nrz -w3 -v1
이름으로 표시합니다.001002 파일 이름 다음에 표시합니다.
while read n f; do mv "$f" "$n.avi"; done
파일 이름을 시퀀스 번호로 변경합니다.
https://www.cloudsavvyit.com/8254/how-to-bulk-rename-files-to-numeric-file-names-in-linux/ 에 대한 기사를 쓰기 위해 이 솔루션을 개발하는 데 3-4시간이 걸렸습니다.
if [ ! -r _e -a ! -r _c ]; then echo 'pdf' > _e; echo 1 > _c ;find . -name "*.$(cat _e)" -print0 | xargs -0 -t -I{} bash -c 'mv -n "{}" $(cat _c).$(cat _e);echo $[ $(cat _c) + 1 ] > _c'; rm -f _e _c; fi
은 올바른 이올른스파이일름에형식(공백, 특수 를 이름 문자)에합니다.\0
가지 find
그리고.xargs
할 수 .echo 1
당신이 원한다면 다른 번호로.
시 (시작시확설정장설(정()pdf
.또한 기존 파일을 덮어쓰지 않습니다.
이러한 파일이 생성된 순서대로 나열된 디렉토리에 있다고 가정합니다. 첫 번째 파일은 가장 오래된 파일입니다.
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월의 Luke의 대답에서 영감을 받았습니다.총 파일 양에 따라 선행 0의 수를 설정해야 하는 Gnutt의 요구 사항을 무시합니다.
저도 비슷한 문제가 있었고 그 이유로 셸 스크립트를 작성했습니다.이미 좋은 답변들이 많이 올라왔음에도 불구하고 누군가에게 도움이 될 수 있다고 생각해서 올리기로 했습니다.자유롭게 개선하세요!
@Gnutt 다음을 입력하여 원하는 동작을 수행할 수 있습니다.
./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r
선택사항인 경우-r
제외됩니다. 리밍은 시뮬레이션만 수행됩니다(테스트에 도움이 될 것입니다).
옵션 L은 대상 번호의 길이를 설명합니다( 선행 0으로 채워짐). 옵션을 사용하여 접두사/접미사를 추가할 수도 있습니다.-p <prefix>
-s <suffix>
.
, 하세요.-o modtime
선택.
a=1
for i in *.jpg; do
mv -- "$i" "$a.jpg"
a=`expr $a + 1`
done
페로의 솔루션을 거의 수정하지 않고 다시 사용하는 이유는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
대부분의 다른 솔루션은 이미 번호로 명명된 기존 파일을 덮어씁니다.이 문제는 스크립트를 실행하고 파일을 추가한 다음 스크립트를 다시 실행하는 경우에 특히 발생합니다.
이 스크립트는 기존 숫자 파일의 이름을 먼저 바꿉니다.
#!/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);
}
시간별로 정렬, jpg로 제한, 선행 0 및 기본 이름(원하는 경우):
ls -t *.jpg | cat -n | \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done
로, (모두한줄로없, 이▁the이,▁() 없이)\
)
작성 날짜와 관련이 없지만 정렬된 이름을 기준으로 번호가 매겨집니다.
python3 -c \
'ext="jpg"
start_num=0
pad=4
import os,glob
files=glob.glob(f"*.{ext}")
files.sort()
renames=list(zip(files,range(start_num,len(files)+start_num)))
for r in renames:
oname=r[0]
nname=f"{r[1]:0{pad}}.{ext}"
print(oname,"->",nname)
os.rename(oname,nname)
'
이 스크립트는 Mac OS bash의 생성 날짜별로 파일을 정렬합니다.동영상 이름을 대량으로 바꾸는 데 사용합니다.이름의 확장자와 첫 번째 부분만 변경하면 됩니다.
ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'
rename -vn - off 테스트 모드의 경우 remove n
{$i=1;} - 제어 시작 번호
"%04d.jpg" - 제어 카운트 004 및 출력 확장자 설정.jpg
저는 이 답변들의 조합이 완벽하게 작동했습니다.
ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
ls -v
데 순서, JPG jpeg1109 파일 , jpg JPG jpeg.1910 파일 확장자 문제 방지gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'
4개의 문자와 선행 0으로 이루어진 숫자입니다.MV를 피함으로써 실수로 같은 번호를 가진 것으로 이미 존재하는 것을 덮어쓰려고 하지 않습니다.bash
실행합니다.
@xihienne이 말한 바에 유의하십시오. 알 수 없는 내용을 bash로 전송하는 것은 보안 위험입니다.하지만 스캔한 사진을 사용하고 있었기 때문에 저는 그렇지 않았습니다.
여기 제게 효과가 있었던 것이 있습니다.
파일 이름에 공백이 포함된 파일이 있으면 mv 명령어가 공백과 실제 파일을 혼동하지 않도록 이름 바꾸기 명령어를 사용했습니다.
여기서 나는 모든 jpg 파일에 대해 파일 이름의 ' '를 '_'로 공백을 바꿉니다.
/bin/continue'y/ /_/' *jpg #공백을 _로 변경합니다.let x=0;i의 경우(*.jpg;do)let x=(x+1)mv $i $x.jpg다 했어요.
요즘에는 이름을 바꾸기 위해 여러 파일을 선택한 후에 옵션이 있습니다(저는 tunar 파일 관리자에서 보았습니다).
- 여러 파일 선택
- 선택사항 확인
- 이름 바꾸기 선택
카테고리 섹션에서 해당 dir에 있는 모든 파일을 확인하라는 메시지가 표시됩니다.
sed 사용:
ls -tr | sed "s/(.*)/mv '\1' \=printf('%04s',line('.').jpg)/" > rename.sh
bash rename.sh
이렇게 하면 스크립트를 실행하기 전에 확인하여 큰 실수를 방지할 수 있습니다.
여기 "이름 바꾸기" 명령을 사용하는 다른 솔루션이 있습니다.
find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'
페로의 대답이 나를 여기에 오게 했습니다 :)
이미지 뷰어가 시간 순서대로 이미지를 표시하지 않기 때문에 시간에 따라 파일 이름을 바꾸고 싶었습니다.
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
번호 6000을 변경하려면 ACD 프로그램의 '이름 변경' 옵션을 사용할 수 있습니다.
하려면 다음합니다.####"*"
그런 다음 시작 번호를 설정하고 Rename을 누르면 프로그램이 모든 6000개 파일의 이름을 순차적으로 변경합니다.
언급URL : https://stackoverflow.com/questions/3211595/renaming-files-in-a-folder-to-sequential-numbers
'code' 카테고리의 다른 글
Linux c++ 오류: 'dlopen'에 대한 정의되지 않은 참조 (0) | 2023.05.08 |
---|---|
ASP.NET 웹 API - PUT & DELETE 동사 허용 안 됨 - IIS 8 (0) | 2023.05.03 |
두 배열을 에서 병합하는 중입니다.그물 (0) | 2023.05.03 |
postgresql에서 함수, 프로시저, 트리거 소스 코드를 표시하는 방법은 무엇입니까? (0) | 2023.05.03 |
이클립스에서 이 원치 않는 바를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.03 |