【Emuelec】清理gamelist.xml的脚本

功能:清理gamelist.xml,检查gamelist.xml中游戏的配置,如果游戏对应的rom不存在,则视为无效配置并将配置删除

## filename: delgame.sh [gamelist.xml的路径,默认为当前路径下的gamelist.xml]
## 使用举例:./delgame.sh /path/to/gamelist.xml
## 功能:清理gamelist.xml。如果没有对应的游戏rom,则将其配置从gamelist.xml中删除

gamelistpath="${1:-gamelist.xml}"
echo "${gamelistpath}"
# 修改编码为utf-8,以支持中文, macos请使用gsed,安装方法:brew install gsed
sed -i '1c \' "${gamelistpath}"
# 获取所有游戏的name
gameList=`xmlstarlet sel -t \
--value-of '/gameList/game/name' \
--nl "${gamelistpath}"`

OLDIFS="$IFS"  #备份旧的IFS变量
IFS=$'\n' #处理游戏名中带空格的情况
# 逐个检查游戏rom是否存在
for game in ${gameList}
do
    echo "处理游戏名:"${game}
    gamepath=`xmlstarlet sel -t \
    --value-of "/gameList/game[name = \"${game}\"]/path" \
    --nl "${gamelistpath}"`
    # 可能出现一个游戏重复配置的情况
    for onepath in ${gamepath}
    do
        # 获取游戏文件的绝对路径,跳过不存在游戏文件的条目
        gamefilepath="$( cd "$(dirname "${gamelistpath}")" && pwd )"/"${onepath}"
        echo "rom路径:"${gamefilepath}
        # 如果是游戏目录则不管
        if  [[ ! -d "${gamefilepath}" ]]  && [[ ! -f "${gamefilepath}" ]] ; then
            echo "游戏rom不存在,删除配置"
            xmlstarlet ed -L -d \
            "/gameList/game[name = \"${game}\" and path = \"${onepath}\" ]" \
            "${gamelistpath}"
        fi
    done
done
IFS="$OLDIFS"  #还原IFS变量

你可能感兴趣的:(shell,emuelec,批处理,xml,linux,shell)