다음과 같은 수십 개의 파일이 있습니다.
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
"이후의 모든 것"을 제거하고 싶습니다.mkv"
나에게 도움이 되는 몇 가지 정규식을 찾아보았지만 사용법을 이해할 수 없습니다.
누구든지 나를 도와줄 수 있나요?
답변1
rename
의견은 prename
다음을 참조하세요.
- Debian/Ubuntu의 이름 바꾸기 유틸리티가 CentOS와 같은 다른 배포판의 이름 바꾸기 유틸리티와 다른 이유는 무엇입니까?
- 이름 바꾸기, 이름 바꾸기, 파일 이름 바꾸기 등 모든 이름 바꾸기 작업은 어떻게 되나요?
이 답변에서는 util-linux 형식이 아닌 Perl 변형을 사용하고 있습니다. 아니요:
$ rename --version
rename from util-linux 2.31.1
하지만:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
또는 유사합니다.
Perl을 사용하여 이름 바꾸기:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
이 -n
옵션을 먼저 사용하여 요구 사항을 충족하는지 확인하세요.
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
간단히 말해서:
s/\.mkv.*/.mkv/s
예:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
리터럴 포인트, \.
문자열 mkv
및 마지막으로 모든 문자( 플래그가 \n
필요한 문자 포함 s
)를 0회 이상 일치시킵니다 .*
.
결과 .mkv<anything>
는 로 대체됩니다 .mkv
.
다음과 같이 표현식을 읽고 구성하는 데 도움이 되는 도구가 있습니다.https://regex101.com/
답변2
존재하다 bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
답변3
답변4
스크립트 배쉬에서
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done