이름 바꾸기에 필요한 올바른 정규식을 찾을 수 없습니다.

이름 바꾸기에 필요한 올바른 정규식을 찾을 수 없습니다.

내 Ubuntu 서버에 일부 TV 프로그램이 저장되어 있고 Kodi가 하나만 제외하고 인식할 수 있도록 모든 프로그램의 이름을 바꿀 수 있었습니다.

에피소드 1, 시즌 1:

Name - S01E001 - Title part1
Name - S01E001 - Title part2
Name - S01E001 - Title part3

시즌 2 에피소드 1:

Name - S02E020 - Title part1
Name - S02E020 - Title part2
Name - S02E020 - Title part3

그래서 Kodi는 두 번째 비디오가 S02E20이라고 생각하지만 실제로는 S02E01입니다. 6개 파일의 이름을 바꾼 후 다음과 같아야 합니다.

에피소드 1, 시즌 1:

Name - S01E001.1 - Title
Name - S01E001.2 - Title
Name - S01E001.3 - Title

시즌 2 에피소드 1:

Name - S02E001.1 - Title
Name - S02E001.2 - Title
Name - S02E001.3 - Title

여기에 관련된 질문이 많이 있지만 이 패턴에 맞는 질문은 없으며 그의 솔루션을 설명하는 사람은 거의 없습니다. 맨페이지가 rename도움이 되지 않습니다.

답변1

그룹 이름, 에피소드 지정자, 제목 및 부품 번호 와 일치하는 정규 표현식을 사용하여 대체 텍스트에 사용할 /^(.*) - (.*) - (.*) part([0-9]+)/수 있습니다 .$1$4

rename 's/^(.*) - (.*) - (.*) part([0-9]+)/$1 - $2.$4 - $3/' *

해당 부분 part1이후의 내용 (예: 파일 확장자)은 변경되지 않습니다.

캡처링 그룹을 수정하려면 e표현식 끝에 수정자를 사용하세요 s/…/…/. 에서 해당 부분은 변수 보간이 적용된 문자열이 아닌 Perl 표현식입니다. Perl 표현식에서 연산자는 문자열을 연결하는 데 사용됩니다. 예를 들어, 부품 번호에서 1을 빼려는 경우:s/REGEX/REPLACEMENT/eREPLACEMENT.

rename 's/^(.*) - (.*) - (.*) part([0-9]+)/"$1 - $2." . ($4-1) . " - $3"/e' *

관련 정보