根据文件名将文件移动到目录中

根据文件名将文件移动到目录中

我不知道如何根据文件名称将文件移动到各自的目录中。基本上,我有很多以 tvshowname.season.episode.ext 或 tv.show.name.season.episode.ext 开头的电视节目。我有名为“显示名称”、“显示名称1”、“显示名称2”等的目录。我想根据名称将文件复制到同名的目录中。

当前文件

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

到目前为止我已经做到了

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

我现在遇到的问题是如何从文件名本身获取前几个单词或至少是节目的名称。然后将其移动到基于该名称的目录中。每个目录被列为《闪电侠》、《橡树岛的诅咒》等。

答案1

也许这会帮助您开始:

#!/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

相关内容