By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
分享Plex数据包时,数据库及配置信息的脱敏及媒体路径替换方法
2020-12-16 17:22:33    986    0    0
emengweb

Plex基本配置文件

内含多处唯一设备id及账号信息,删除文件系统会自动生成,但是将变为重新安装状态。

  • /plex/config/Library/Application Support/Plex Media Server/Preferences.xml

 

Plex媒体数据库

数据库文件位置:

  • /plex/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db

以下为关键表结构

敏感信息,需要清空:

  • accounts - 内含账户信息,需要清空表
  • devices - 内含登录设备及id,需要清空表
  • external_metadata_sources - 内含账户关联的好友分享服务器及uri地址,需要清空表
  • play_queues - 内含播放媒体的客户端id记录,需要清空表

媒体路径信息,需要替换路径:

  • media_parts - 内含媒体详细文件信息,其中file列包含文件路径,可用于批量替换
  • media_streams - 内含媒体字幕信息,其中uri列包含文件路径,可用于批量替换
  • section_locations - 内含媒体库路径,其中root_path列包含文件路径,可用于批量替换

无需改动:

  • library_sections - 内含plex媒体库的名称等信息
  • media_items - 内含媒体封面及缩略图位置信息,user_thumb_url及user_art_url存放路径类似media://0/xoxixo.bundle/Cont...

 

媒体附加信息

建议遍历此目录所有.xml文件,替换包含路径的文字内容

  • /plex/config/Library/Application Support/Plex Media Server/Media/localhost/*.xml

例:

/Library/Application Support/Plex Media Server/Media/localhost/0/0cd1d3b24102303ab2b954d7a37e8f7f7ebf8b7.bundle/Contents/Plex Movie/Subtitles.xml

内含字幕信息,可批量替换。字幕文件路径存储在:Subtitles/Language/Subtitle/@file字段下。

 

媒体库替换步骤

  • 删除 /plex/config/Library/Application Support/Plex Media Server/Preferences.xml 
  • 批量替换数据库删除敏感信息 ,替换媒体路径信息 /plex/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db
  • 批量查找此目录下的xml文件 /plex/config/Library/Application Support/Plex Media Server/Media/localhost/*.xml,替换媒体路径信息

替换删除并替换数据库中的媒体库路径

使用此命令打开sql数据库,输入以下sql命令

sqlite3 "/plex/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db" 

# 数据库脱敏
delete from accounts;
delete from devices;
delete from external_metadata_sources;
delete from play_queues;

# 批量替换表中文件目录路径字符
update media_parts set file = replace(file,'/home','/newPath');
update media_streams set uri = replace(uri,'/home','/newPath');
update section_locations set root_path = replace(root_path,'/home','/newPath');


手动替换媒体附加信息的路径(有问题,弃用)

注意将 /PATH 替换为新的媒体挂载目录(正则中路径的/字符需要改为\/进行字符转义),将 /plex/config 替换为pelx媒体库的路径。

#sed -i "s/\/home/\/PATH/g" `grep abc -rl "/root/plex/config/Library/Application Support/Plex Media Server/Media/localhost/0"`
# 有问题,无法查找到文件

#find "/root/plex/config/Library/Application Support/Plex Media Server/Media/localhost/0" -name '*xml' | xargs -i echo mv \"{}\" \"{}\" | sed 's/\/home/\/PATH/g' | sh



脚本(sql执行时有问题,弃用)

deal_plex_data.sh

#!/bin/bash

# Plex 应用数据的 config 目录
#PLEX_DIR=/plex/config
PLEX_DIR=/plex/config
# 当前默认的媒体库目录
MEIDA_PATH_DEF=/home
# 被替换的媒体库目录
MEIDA_PATH=/home
# 默认是否替换数据路径
place_path=n

read -p "# 是否对数据库中媒体路径进行替换? (y/N):" place_path
if [ "$place_path" = "y" ] || [ "$place_path" = "Y" ]; then
    read -p "# 当前根目录为 '$MEIDA_PATH' , 请输入新的根目录路径:" MEIDA_PATH
    echo "# Plex 数据库中媒体根目录将被替换为 '${MEIDA_PATH}'"
fi

echo '# 删除配置文件 Preferences.xml'
rm -f "${PLEX_DIR}/Library/Application Support/Plex Media Server/Preferences.xml"

echo '# 处理媒体库脱敏及路径替换'
sudo apt-get install sqlite3 -y
SQL_PATH="${PLEX_DIR}/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"
# 删除表中所有数据 db.execSQL("delete from table")
sqlite3 ${SQL_PATH} "delete from accounts; delete from devices; delete from external_metadata_sources;  delete from play_queues;"
# 批量替换表中文件目录路径字符
if [ "$place_path" = "y" ] || [ "$place_path" = "Y" ]; then
update media_parts set file = replace(file,"'${MEIDA_PATH_DEF}'","'${MEIDA_PATH}'");
update media_streams set uri = replace(uri,"'${MEIDA_PATH_DEF}'","'${MEIDA_PATH}'");
update section_locations set root_path = replace(root_path,"'${MEIDA_PATH_DEF}'","'${MEIDA_PATH}'");
fi
.quit
echo '# 数据库处理完毕'

# 批量替换媒体附加信息中的文件目录路径字符
echo '# 媒体附加信息替换'
if [ "$place_path" = "y" ] || [ "$place_path" = "Y" ]; then
echo '# 您还需要手动处理媒体附加信息中的路径替换'
fi

 

上一篇: Docker Hub + GitHub实现镜像自动构建

下一篇: 进阶篇:基于Google Drive的Plex私人媒体库使用Nginx进行中继的方法

986 人读过
文档导航