목록을 기반으로 파일 이름 바꾸기

목록을 기반으로 파일 이름 바꾸기

저는 이러한 비디오 파일을 가지고 있습니다.

Fringe.S03E01.mkv 
Fringe.S03E02.mkv 
Fringe.S03E03.mkv 
etc...

에피소드 제목이 포함된 .csv 텍스트 파일도 있습니다.

01,Olivia
02,The Box
03,The Plateau
etc...

내가 달성하고 싶은 것은;

Fringe.S03E01.Olivia.mkv
Fringe.S03E02.The Box.mkv
Fringe.S03E03.The Plateau.mkv
etc...

foreach를 사용하여 bash 스크립트의 구문을 알아내려고 노력했지만 사용 가능한 결과를 얻지 못했습니다.

답변1

fringe_copy(){
        local IFS=,
        while read num title; do
                f=Fringe.S03E$num.mkv
                if [ -f "$f" ]; then
                        echo mv "$f" "${f%.mkv}.$title.mkv"
                fi
        done
}
fringe_copy <list_of_files

체험판 실행에 만족하셨다면 echo이전 콘텐츠를 삭제하셔야 합니다.mv

답변2

awk제안 도 시도해 보세요.

ls Fringe* |
awk '
NR == FNR       {EP[$1]=$2
                 next
                }
                {IX=substr($2, length($2)-1, 2)
                 $2 = $2 OFS EP[IX]
                }
1
' FS=, episodes.csv FS=. OFS=. -
Fringe.S03E01.Olivia.mkv
Fringe.S03E02.The Box.mkv
Fringe.S03E03.The Plateau.mkv

에피소드 제목 파일을 대체 배열로 읽은 후 결과에 따라 ls$2의 마지막 두 문자에 있는 숫자를 기준으로 적절한 제목을 삽입합니다.

관련 정보