파일 이름의 특정 위치에서 임의의 문자열을 제거합니다.

파일 이름의 특정 위치에서 임의의 문자열을 제거합니다.

저는 YouTube를 사용하여 YouTube에서 수십 개의 파일을 다운로드했습니다 youtube-dl. 좋은 기능입니다. 다 검색해 보니 상당수가 무작위 숫자와 대문자, 소문자로 끝나는 경우가 많았습니다. 좋다 video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi.

$ rename -n 's/-.*avi/.avi/i' *.avi– 첫 번째 것을 선택 -하고 video_name_number_of_video_.avi이름을 남겨주세요.

문자와 숫자 조합을 제거하는 옵션이 있나요?도움을 주시면 감사하겠습니다. 그리고 그 안에는 13자리 숫자만 있습니다.

추가: 누군가 내가 원하는 것이 무엇인지 물었습니다. 그래서 저는 분명히 파일 이름에서 그 13자리 숫자를 제거하고 그 이후로 행복하게 살고 싶습니다. 나의 목표를 이루기 위한 실용적인 질문을 과감하게 던졌습니다.

답변1

나는 이것이 YouTube 비디오 ID라고 가정합니다. 다음과 같은 정규식을 사용하여 제거할 수 있습니다.

s/-[^-.]{13}\.avi$/.avi/

이것을 여러 부분으로 나누면 다음과 같습니다.

  • -- 단지 하이픈일 뿐
  • [^-.]{13}- 하이픈이나 마침표가 아닌 정확히 13자
  • \.avi- 파일 이름의 ".avi"와 일치합니다.
  • $앵커 포인트는 문자열(파일 이름)의 끝에 있습니다.

답변2

rename -n 's/-[^-]*\.avi$/.avi/i' ./*

아이디어는 문자열 끝에서 대시가 아닌 문자( ) 다음에 ( ) 가 오는 -일련 의 문자열을 일치시키는 것입니다. 처음부터 끝까지 일치합니다 .*[^-].avi$-.*avi-avi

그리고 zsh:

autoload zmv # in ~/.zshrc as it's a damn useful command

zmv -n '(#i)(*)(-*)(.avi)' '$1$3'

(#i)대소문자를 구분하는 와일드카드에 사용됩니다.

답변3

이것은 한 가지 방법입니다. 모든 파일 이름을 텍스트 파일 filename.txt에 넣습니다.

video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d2.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d3.avi

스크립트 작성:

#/bin/bash -

while IFS= read -r line 
do
    mv -- "$line" "${line%-*}.avi"
done < filename.txt

관련 정보