많은 파일의 특정 부분 이름 바꾸기

많은 파일의 특정 부분 이름 바꾸기

다음과 같은 파일이 많이 있습니다.

Brooklyn Nine-Nine S01 E01 [H264].mkv
Brooklyn Nine-Nine S01 E02 [H264].mkv
Brooklyn Nine-Nine S01 E03 [H264].mkv
Brooklyn Nine-Nine S01 E04 [H264].mkv
Brooklyn Nine-Nine S01 E05 [H264].mkv
Brooklyn Nine-Nine S01 E06 [H264].mkv
Brooklyn Nine-Nine S01 E07 [H264].mkv
Brooklyn Nine-Nine S01 E08 [H264].mkv
...

S01과 E08 사이의 공백이 제거되도록 이름을 바꾸고 싶습니다. 예

Brooklyn Nine-Nine S01E08 [H264].mkv

모든 공백을 제거하는 명령을 찾았습니다.

IFS="\n"
for file in *.mkv;
do
    mv "$file" "${file/[[:space:]]}"
done

하지만 Sxx와 Exx 사이의 공백을 제거하고 싶습니다.

답변1

가장 쉬운 방법은 이 rename도구를 사용하는 것입니다. 이 도구를 사용하면 여러 파일 이름을 간단하게 검색하고 바꿀 수 있습니다.

rename [options] <expression> <replacement> <file>...

다음과 같이 해야 합니다.

rename " E0" E0 Brooklyn*.mkv

Debian과 유사한 배포판을 사용하는 경우 명령은 rename대신 다른 입력 구문을 사용하여 Perl 스크립트를 호출할 수 있습니다 util-linux. 이 경우 rename.ul올바른 구문을 호출하는 도구를 사용하십시오.Debian/Ubuntu의 이름 바꾸기 유틸리티가 CentOS와 같은 다른 배포판의 이름 바꾸기 유틸리티와 다른 이유는 무엇입니까?

답변2

for 루프는 다음과 같이 편집할 수 있습니다.

for file in *.mkv;
do
   mv "$file" "${file//S01 E0/S01E0}"
done

또는 rename다음 명령을 사용하십시오.

rename 's/S01 E0/S01E0/' *.mkv

관련 정보