터미널을 사용하여 파일 이름의 숫자 변경

터미널을 사용하여 파일 이름의 숫자 변경

이름이 포함된 파일이 많이 있습니다.파일00.txt,파일01.txt등 폴더. 터미널에서 모든 숫자를 (4000+200*숫자)와 같은 위치로 변경할 수 있나요? 최종 파일의 이름을 지정하고 싶습니다.파일 4000.txt,파일 4200.txt감사합니다! !

답변1

설치 하셨다면 zsh...

autoload zmv
zmv -n '(file)(<->)(.txt)' '$1$((4000+$2*200))$3'

-n결과가 만족스러우면 삭제하세요.

답변2

나는 보통 rename이것을 악용하기 위해 사용합니다perlre

$ rename -v 's/^(file)(\d+)(\.txt)$/$1 . (4000+200*$2) . $3/e' *.txt
file00.txt renamed as file4000.txt
file01.txt renamed as file4200.txt

또는 Glenn Jackman이 의견에서 제안한 것처럼;

$ rename -v 's/(\d+)/4000 + 200*$1/e' file*.txt

설명하다:

여기서는 s/foo/bar/바꾸기 foo구문을 사용합니다 bar.

foo^(file)(\d+)(.txt). 따라서 표현식은 로 시작하고 foo, 1개 이상의 숫자를 포함하고, .txt확장자가 뒤에 오는 모든 파일과 일치하며 그 외에는 아무것도 일치하지 않습니다. file캡처 그룹 1, 캡처 그룹 2, .txt캡처 그룹 3에 저장된 숫자입니다.

그런 다음 bar새 파일 이름으로 바꿉니다 $1 . (4200 + $2) . $3. 4200을 추가하여 그룹 2(번호)를 캡처하고 $1와 연결합니다 $3.

연결이 실제로 평가되도록 하려면 ein 수정자가 필요합니다 .s/foo/bar/e(4000 + 200*$2)

변경된 내용을 인쇄하기 위해 추가했지만 테스트할 때 실제로 작동하는 방식에 만족할 때까지 아무 것도 변경하지 않도록 -v사용하고 싶을 것입니다 .-n

명령의 마지막 매개변수 rename는 입니다 *.txt. 이는 평가할 파일 목록일 뿐입니다. 에서 확장을 확인했으므로 여기서를 사용할 perlre수 있습니다 . *( )와 일치하지 않는 항목은 foo변경되지 않습니다.

이 답변은 file-renameDebian의 패키지를 사용합니다.이름을 바꿔라update-alternatives를 제공 하는 데 사용됩니다 /usr/bin/rename. 이 패키지가 설치되어 있지 않은 경우 rename.ul설치 했을 수 있습니다.유틸리티Linux. rename.ul다른 표현 시스템을 사용하며 여기서 설명하는 시스템에서는 작동하지 않습니다.

답변3

이름을 바꾸고 싶지 않다면모두파일 이름과 이름을 바꾸려는 경우일부내의 파일 수특정 범위, 수정된 버전의 솔루션이 답변도착하다터미널을 사용하여 연속된 이름을 가진 파일의 이름을 다른 시퀀스로 바꾸는 방법은 무엇입니까?어느 정도 유용할 수도 있습니다.

예를 들어, to to to file05.txt로 이름을 바꾸려면 다음과 같이 하십시오 .file11.txtfile5000.txtfile7200.txt

for index in {05..11}; do echo mv file"${index}".txt file"$((4000+index*200))".txt; done

echo단지 명령이 예상대로 작동하는지 테스트하는 것뿐입니다 . echo출력이 올바르게 표시되면 삭제합니다.

단위 번호 주석(번호 <10)

file01.txtto 범위에 있는 파일의 경우 file09.txt범위 0의 단일 숫자 앞에 추가해야 합니다. 따라서 대신

for index in {5..11};

놓아줄래?

for index in {05..11};

두 자리 범위의 경우 0앞의 내용이 필요하지 않습니다. 예를 들어 13~25의 경우:

for index in {13..25};

관련 정보