功能:清理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 \<?xml version="1.0" encoding="utf-8"?>' "${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变量