【问题标题】:shell script to rename folder by info from file insideshell脚本通过文件中的信息重命名文件夹
【发布时间】:2014-01-06 10:59:34
【问题描述】:

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

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

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

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

movie.nfo

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

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

也许有人可以帮助我!

【问题讨论】:

    标签: shell grep find rename xbmc


    【解决方案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 命令即可。)

    【讨论】:

    • 我试过了,但是 sed 向变量写入了太多内容,包括搜索词行之前和之后的所有行......我试图理解 sed 命令,但我失败了......
    • 任何人都知道如何防止title="$(sed 's|.*&lt;title&gt;\(.*\)&lt;/title&gt;.*|\1|g' $file)" 不添加包含标题的行上方和下方的所有内容吗?
    • 它不会在行的上方和下方添加所有内容。它应该只添加标题标签之间的内容。您的文件格式是否与问题中显示的完全一致?
    • 我在我的问题中缩短了文件。也许BR和LF有问题?我刚刚添加了指向原始文件的链接,
    猜你喜欢
    • 2015-07-13
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2014-05-01
    • 2015-06-02
    • 2011-06-19
    相关资源
    最近更新 更多