정규식 뒤의 이름 일부 제거

정규식 뒤의 이름 일부 제거

다음과 같은 명명 체계를 사용하는 많은 비디오 파일이 있습니다.

몇 가지 단어-SxxExx.extension

이것이 내가 선호하는 것입니다. 안타깝게도 이 형식의 파일이 많이 있습니다.

일부 단어-SxxExx-단어-.확장자를 삭제하고 싶습니다.

Exx 섹션 이후의 모든 항목을 자동으로 삭제해야 합니다.

답변1

x자리 표시자를 가정하면 zmv다음이 가능합니다. zmv -nv '(*S??E??)*.ext' '$1.ext'

% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext

'(*S[0-9][0-9]E[0-9][0-9])*.ext'대신에 숫자만 일치를 사용할 수도 있습니다 x.

또는 다음을 사용하려는 경우 sed:

for f in *.ext; do
    echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done

또는 Perl rename명령을 사용하십시오(현재 file-renameDebian에서는 이를 호출함).

file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext

( 실제로 이름을 바꾸려면 echo앞의 mv및 및 -n플래그를 제거하십시오. 반면에 기존 파일을 덮어 쓰지 말라고 지시합니다. 이는 최소한 GNU에서 작동합니다 .)zmvfile-renamemv -nmv

답변2

어때요?

$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension

(zsh 애호가들이 쉘 대체를 사용하여 이 작업을 더 간단하게 수행할 수 있었으면 좋겠지만).

관련 정보