shell脚本,用于根据文件内部的信息重命名文件夹

shell脚本,用于根据文件内部的信息重命名文件夹,shell,grep,find,rename,xbmc,Shell,Grep,Find,Rename,Xbmc,嗯,我得到了一组文件夹,每个文件夹都包含一个来自XBMC的*.nfo文件(除了其他文件,如视频和图片等) 我想通过*.nfo文件中的字符串重命名文件夹。 此类*.nfo文件的相关内容: ... <title>Filmtitle</title> ... <year>2011</year> ... <director>Werner Herzog</director> ... 。。。 电影名称 ... 2

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

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

...
    <title>Filmtitle</title>
...
    <year>2011</year>
...
    <director>Werner Herzog</director>
...
。。。
电影名称
...
2011
...
沃纳·赫尔佐格
...
更新:这是一个未经修改的原始.nfo文件,来自XBMC

我用
find exec
grep
做了很多尝试,但没有得到任何有用的

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


也许有人能帮我

试试下面的脚本。它从每个文件中提取标题、年份和主管,然后重命名目录:

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
find-键入f-name“*.nfo”-print0 |,而IFS=read-r-d$'\0'文件
做
title=“$(sed's |.*\(.*).*1 | g'$文件)”
year=“$(sed's |.*\(.*).\1 | g'$文件)”
director=“$(sed的|.*\(.*).\1 | g'$文件)”
dirName=“${file%/*}”
newDirName=“${dirName%/*}/$title[$year,$director]”
#mv“$dirName”“$newDirName”
echo mv“$dirName”“$newDirName”
完成

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

我尝试过,但sed向变量写入了太多内容,以及带有搜索词的行前后的所有行。。。我试图理解sed命令,但我失败了……有人知道如何防止
title=“$(sed的|.*(.*).*.\1 | g'$file)”
不要在包含标题的行的上方和下方添加所有内容?它不会在行的上方和下方添加所有内容。它应该只添加标题标签之间的内容。您的文件格式是否完全如问题所示?我在问题中缩短了文件的长度。也许BR和LF有问题?我刚刚添加了一个原始文件的链接,