Mover arquivos para o diretório com base no nome deles

0

Não sei como abordar a movimentação de arquivos com base no nome deles em seus respectivos diretórios. Basicamente, eu tenho um monte de programas de TV que começam como tvshowname.season.episode.ext ou tv.show.name.season.episode.ext. Eu tenho diretórios chamados Mostrar nome, Mostrar nome1, Mostrar nome2, etc. Eu gostaria de copiar os arquivos com base no nome deles nos diretórios com o mesmo nome.

Arquivos atuais

Game of Thrones
Shooter
The Curse of Oak Island  
Van.Helsing.S01E08.Little.Things.720p.WEB-DL.DD5.1.H264-DRACULA.mkv
Van.Helsing.S01E08.Little.Things.720p.WEB-DL.DD5.1.H264-DRACULA.mp4
Real Vikings
Van Helsing

Até agora eu fiz isso

    #!/bin/bash
for FILE in "'ls *.{mp4,mkv}'"
do
        filename=$(basename "$FILE")
        extension=${filename##*.}
        filename=${filename%.*}
echo $filename
done

O problema que estou enfrentando agora é como obter as primeiras palavras ou, pelo menos, o nome do programa a partir do próprio nome do arquivo. Em seguida, mova-o para o diretório com base nesse nome. Cada diretório é listado como O Flash, A Maldição da Ilha do Carvalho, etc.

    
por Ryahn 08.12.2016 / 22:01

1 resposta

0

Talvez isso ajude você a começar:

#!/bin/bash
for f in *.{mp4,mkv}           # no need to use ls.
do
    filename=${f##*/}          # Use the last part of a path.
    extension=${f##*.}         # Remove up to the last dot.
    filename=${filename%.*}    # Remove from the last dot.
    dir=${filename#tv}         # Remove "tv" in front of filename.
    dir=${dir%.*}              # Remove episode
    dir=${dir%.*}              # Remove season
    dir=${dir//.}              # Remove all dots.
    echo "$filename $dir"
    if [[ -d $dir ]]; then     # If the directory exists
        mv "$filename" "$dir"/ # Move file there.
    fi
done
    
por 08.12.2016 / 22:23

Tags