정규식 뒤의 이름 일부 제거

정규식 뒤의 이름 일부 제거

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

일부 단어-SxxExx.extension

그게 내 취향이야. 안타깝게도 이 형식의 파일이 많이 있습니다.

일부-단어-SxxExx-단어-I-want-to-remove.extension

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-rename

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

(실제로 이름 바꾸기를 수행하려면 의 앞에서 및 플래그를 제거하십시오 . 반면 echomv기존 -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 애호가라면 쉘 대체를 사용하여 더 간단하게 이를 수행할 수 있을 것으로 기대하지만).

관련 정보