根据列表重命名文件

根据列表重命名文件

我有这些视频文件;

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 最后两个字符中的数字插入相应的标题。

相关内容