Renomeie os arquivos com base na lista

0

Eu tenho esses arquivos de vídeo;

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

Eu também tenho um arquivo de texto .csv dos títulos do episódio;

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

estou tentando chegar a isso;

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

Eu tenho tentado descobrir a sintaxe de um script bash usando foreach, mas não obtendo nenhum resultado utilizável.

    
por user88710 29.09.2018 / 00:45

2 respostas

4
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

Você terá que remover o echo de antes de mv se estiver satisfeito com a execução a seco.

    
por 29.09.2018 / 01:33
1

Experimente também esta awk proposal

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

Depois de ler o arquivo de títulos de episódios no array substituto, ele age sobre os resultados ls e insere o respectivo título com base no número nos dois últimos caracteres de $ 2.

    
por 29.09.2018 / 10:33

Tags