이 일괄 이름 바꾸기 기능을 어떻게 스크립팅할 수 있나요?

이 일괄 이름 바꾸기 기능을 어떻게 스크립팅할 수 있나요?

현재 작업 디렉토리에 4개의 폴더가 있습니다. 각 폴더에는 다음 형식으로 명명된 여러 파일이 포함되어 있습니다.

HEXA DECA - Season 01 Episode 01 - name of episode
HEXA DECA - Season 01 Episode 02 - name of episode

이름을 다음으로 바꾸고 싶습니다.

HE'XA DECA - S01E01 - name of episode
HE'XA DECA - S01E02 - name of episode

sed나에게는 조금 너무 어려운 일이다. 이를 달성하는 가장 좋은 방법은 무엇입니까?

답변1

나는 이것이 vidir이러한 문제에 대한 가장 유연하고 투명한 해결책이라는 것을 알았습니다. 여기서 VIM이나 다른 편집기를 사용하여 파일 이름으로 텍스트 파일을 편집하면 변경 사항이 적용됩니다.

답변2

개인적으로 저는 mmv그런 작업에 사용합니다. 다른 사람들이 사용하는 것 rename. 내 시도(분명히 테스트되지 않았으므로 해당 -n옵션을 먼저 시도했습니다):

for dir in ....; do
    ( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" )
done

내가 cd먼저 들어가서 이러지 $dir않아도 mmv "$dir/..."괜찮아요 . 이는 디렉터리에 ?또는 같은 mmv용 특수 문자가 포함되는 것을 방지하기 위한 것입니다 *.

답변3

rename이 명령은 필요한 작업을 수행합니다.

find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\$1HE'XA DECA - S\$2E\$3 \$4/" {} \; 

작은따옴표로는 이스케이프할 수 없지만 큰따옴표에서는 문자를 '이스케이프해야 하기 때문에 백슬래시가 필요합니다 .$

여기서는 디렉터리와 하위 디렉터리의 모든 파일을 찾아 이름을 바꾸려고 합니다.

s/regexp/smth모든 regexp일치 항목을 smth.

^(.*\/)는 경로의 첫 번째 부분으로, 기본 이름이 없는 모든 항목이 \$1.

HEXA DECA - SeasonEpisode저장되지 않는 부분이지만 매칭에 사용되는 템플릿입니다.

([0-9]*)\$2s는 sum 에 저장된 시즌과 에피소드의 수입니다 \$3.

(.*)$에피소드 이름이 포함된 문자열의 마지막 부분입니다 \$4.

두 번째 부분에서는 s를 보고 싶은 패턴으로 바꿉니다 s///.\$N

관련 정보