User Tools

Site Tools


kodi:move-sources

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
kodi:move-sources [2021/11/01 11:47] – created Wulf Rajekkodi:move-sources [2023/05/29 11:55] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Kodi Move Sources ====== ====== Kodi Move Sources ======
  
-Update paths of Textures13.db SQLite DB:+Update paths of latest MyMusic table of Music MySQL DB: 
 +<code> 
 +mysql -u kodi -p 
 +</code> 
 +<code> 
 +use MyMusic82 
 +UPDATE path SET strPath = REPLACE(strPath,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +exit 
 +</code> 
 + 
 +Update paths of latest MyVideo table of Movies/TV/MusicVideos MySQL DB: 
 +<code> 
 +mysql -u kodi -p 
 +</code> 
 +<code> 
 +use MyVideos119 
 +UPDATE path SET strPath = REPLACE(strPath,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +UPDATE movie SET c22 = REPLACE(c22,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +UPDATE episode SET c18 = REPLACE(c18,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +UPDATE art SET url = REPLACE(url,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +UPDATE tvshow SET c16 = REPLACE(c16,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +UPDATE files SET strFilename = REPLACE(strFilename,'smb://my_nas/old_share', 'smb://my_nas/new_share'); 
 +exit 
 +</code> 
 + 
 +Update paths of latest Textures13.db SQLite DB:
 <code> <code>
 cd .kodi/userdata/Database cd .kodi/userdata/Database
Line 11: Line 36:
 .quit .quit
 </code> </code>
 +
 +Adjust favourites
 +<code>
 +vi .kodi/userdata/favourites.xml
 +</code>
 +
 +Adjust source
 +<code>
 +vi .kodi/userdata/sources.xml
 +</code>
 +Note: Restart kodi after source adjustment!
  
 https://kodi.wiki/view/HOW-TO:Update_SQL_databases_when_files_move https://kodi.wiki/view/HOW-TO:Update_SQL_databases_when_files_move
 +
 +<code - kodimovesource.sh>
 +#!/bin/bash
 +dbhost="localhost"
 +dbuser="kodi"
 +dbpassword="kodi"
 +kodihome="/home/kodi"
 +
 +if [[ $# -lt 2 ]] || [[ $# -gt 2 ]]
 +then
 +    echo "Usage: ${0##*/} old_path new_path"
 +    echo "Escape special characters in paths or enclose in double quotes"
 +    exit 0
 +fi
 +
 +echo -e "Updating Kodi media sources \nfrom '$1' \nto '$2'"
 +read -r -p "Are you sure? [y/N] " response
 +response=${response,,   # tolower
 +if [[ ! "$response" =~ ^(yes|y)$ ]]
 +then
 +    exit 0
 +fi
 +
 +#find highest numeric MyVideos / MyMusic db
 +videodb=$(mysql -h$dbhost -u$dbuser -p$dbpassword -e "show databases like 'MyVideos%';" 2>/dev/null | sort -g -r | head -1)
 +audiodb=$(mysql -h$dbhost -u$dbuser -p$dbpassword -e "show databases like 'MyMusic%';" 2>/dev/null | sort -g -r | head -1)
 +texturedb=$(ls $kodihome/.kodi/userdata/Database/Textures* | sort -g -r | head -1)
 +
 +echo "Databases to adjust: $videodb $audiodb "$(basename $texturedb)" ..."
 +
 +# Escaping paths for MySQL/SQLite3 inserts
 +printf -v from "%q" "$1"
 +printf -v to "%q" "$2"
 +
 +# updating databases
 +echo "Updating mysql databases from '$1' to '$2' ..."
 +#exit 0
 +mysql -h$dbhost -u$dbuser -p$dbpassword 2>/dev/null <<EOF
 +use $videodb
 +UPDATE ignore path SET strPath = REPLACE(strPath,'$from', '$to');
 +UPDATE ignore movie SET c22 = REPLACE(c22,'$from', '$to');
 +UPDATE ignore episode SET c18 = REPLACE(c18,'$from', '$to');
 +UPDATE ignore art SET url = REPLACE(url,'$from', '$to');
 +UPDATE ignore tvshow SET c16 = REPLACE(c16,'$from', '$to');
 +UPDATE ignore files SET strFilename = REPLACE(strFilename,'$from', '$to');
 +use $audiodb
 +UPDATE ignore path SET strPath = REPLACE(strPath,'$from', '$to');
 +EOF
 +
 +echo "Updating sqlite database from '$1' to '$2' ..."
 +sqlite3 $texturedb <<EOF
 +UPDATE path SET url = REPLACE(url,"$1","$2o");
 +UPDATE path SET texture = REPLACE(texture,"$1","$2");
 +EOF
 +
 +echo "Updating sources.xml file from '$1' to '$2' ..."
 +# updating sources file (using pipe separator avoiding forward slash issues)
 +sed -i "s|$1|$2|g" $kodihome/.kodi/userdata/sources.xml
 +
 +echo "Updating favourites.xml file from '$1' to '$2' ..."
 +# updating sources file (using pipe separator avoiding forward slash issues)
 +sed -i "s|$1|$2|g" $kodihome/.kodi/userdata/favourites.xml
 +
 +echo "Kodi restart is required to apply new sources and paths"
 +read -r -p "Restart Kodi now? [y/N] " response
 +response=${response,,   # tolower
 +if [[ "$response" =~ ^(yes|y)$ ]]
 +then
 +    service kodi restart
 +    echo "Kodi restarted."
 +fi
 +
 +echo "All done"
 +</code>
 +
 +example moving folders while ignoring A/An/The at the start and adjusting the Kodi paths with above bash script (comment out the verification prompts in the script to automate):
 +<code>
 +
 +#Move based on First letter of movie name, excluding 'A ' or 'An ' or 'The '
 +for i in {0..9} {A..Z}; do mv -v /volume5/downloads/_NEW_MOVIES/{A\ ,An\ ,A.,An.,The\ ,The.}$i* /volume2/allmovies/$i;done
 +#remaining after A/An/The processed
 +for i in {0..9} {A..Z}; do mv -v /volume5/downloads/_NEW_MOVIES/$i* /volume2/allmovies/$i;done
 +
 +
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/A $i" "/volume2/allmovies/$i/A $i"; done
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/A.$i" "/volume2/allmovies/$i/A.$i"; done
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/An $i" "/volume2/allmovies/$i/An $i"; done
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/An.$i" "/volume2/allmovies/$i/An.$i"; done
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/The $i" "/volume2/allmovies/$i/The $i"; done
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/The.$i" "/volume2/allmovies/$i/The.$i"; done
 +
 +#remaining after A/An/The processed
 +for i in {0..9} {A..Z}; do ~/kodimovesource.sh "/volume5/downloads/_NEW_MOVIES/$i" "/volume2/allmovies/$i/$i"; done
 +
 +</code>
kodi/move-sources.1635767256.txt.gz · Last modified: 2023/05/29 11:53 (external edit)