shell脚本按文件里面的信息重命名文件夹

时间:2013-12-18 10:12:29

标签: shell grep find rename xbmc

好吧,我有一组文件夹,每个文件夹都包含一个来自XBMC的* .nfo文件(除了其他文件,如视频和图片等)。

我想通过* .nfo文件中的字符串重命名文件夹。 这样的* .nfo文件的相关内容:

...
    <title>Filmtitle</title>
...
    <year>2011</year>
...
    <director>Werner Herzog</director>
...

更新:这是来自XBMC的未经修改的原始.nfo文件

movie.nfo

我用find execgrep做了很多尝试,但我没有真正得到任何可用的东西......

在上面的示例中,文件夹的名称应为“Filmtitel [2011,Werner Herzog]”

也许有人可以帮助我!

1 个答案:

答案 0 :(得分:1)

尝试以下脚本。它从每个文件中提取标题,年份和导演,然后重命名目录:

find . -type f -name "*.nfo" -print0 | while IFS= read -r -d $'\0' file
do
    title="$(sed 's|.*<title>\(.*\)</title>.*|\1|g' $file)"
    year="$(sed 's|.*<year>\(.*\)</year>.*|\1|g' $file)"
    director="$(sed 's|.*<director>\(.*\)</director>.*|\1|g' $file)"

    dirName="${file%/*}"
    newDirName="${dirName%/*}/$title [$year, $director]"
    # mv "$dirName" "$newDirName"
    echo mv "$dirName" "$newDirName"
done

(如果您对打印出的命令正确感到满意,则只需取消注释mv命令。)