#!/bin/bash # @author 6543 # @version 0.1 # @date 2019-02-07 ## Options/Parameter # $1: # -a | add files of md5-file to db # -r | remove files of md5-file from db # -d | mark files from md5-file ad deleted # -ee | export md5 of existing files # -ed | export md5 of deleted fiels # # $2: <paht of md5-file> # [$3]: <path to movie folder> { #set enviroemnt readonly TRUE=1 #like <stdbool.h> readonly FALSE=0 #like <stdbool.h> readonly TTSYNC_EXIST=0 readonly TTSYNC_BACKUP=1 readonly TTSYNC_REMOTE=2 readonly TTSYNC_DEL=3 readonly globalconf="/etc/tt/global" } { #get options & args readonly mode=$(echo $1 | tr -d '-') readonly md5="$2" moviedir="$3" } { #db dbname="tt_test" dbhost="localhost" dbuser="root" dbpwd="" } function help() { #help menue echo "$0 is part of the TerabyteTerminator Project" echo "" echo "import-md5-list <mode> <md5-file> [moviedir]" echo " modes:" echo " -a add files of md5-file to db" echo " -r remove files of md5-file from db" echo " -d mark files from md5-file ad deleted" echo " -ee export md5 of existing files" echo " -ed export md5 of deleted fiels" echo "" echo " moviedir: Is optional if it is already in the global config" exit 0 } if [ "$mode" == "help" ] && help ##check & prepair args [ ${mode:0:1} == "e" ] && touch "$md5" [ -f "$md5" ] || { echo "md5 \"$md5\" do not exist"; exit 1; } # check md5 [ -z "$moviedir" ] && [ -f "$globalconf" ] && { # if (no argument) and (globalconf exist) if [ -z "$(grep "moviedir=" "$globalconf" )" ]; then # and (moviedir is NOT in globalconf) echo 'neither "movie folder" is set in global config nor given as argument' exit 2 else # and (moviedir is in globalconf) moviedir="$(grep "moviedir=" "$globalconf" | cut -d '=' -f 2)" fi } [ -d "$moviedir" ] || { echo "moviedir \"$moviedir\" do not exist"; exit 3; } # check moviedir moviedir=""$(echo $moviedir | sed 's|/$||g')"" [ -z "$moviedir" ] && exit 255 #catch case moviedir="/" ## functions function md5_in_add() { cat $md5 | while read line; do #for each line in md5 local md5=$(echo $line | cut -c -32) local path=$(echo $line | cut -c 33- | sed 's/^\ //g') local relrevpath=$(echo $path | sed "s|^$moviedir||g" | sed 's|^/||g' | sed 's|/$||g' | rev) local name=$(echo $relrevpath | cut -d '/' -f 1 | rev) local folder=$(echo $relrevpath | cut -d '/' -f 2- | rev) db_query "INSERT INTO File (MD5, Folder, Name, TTSync) VALUES ('$md5', '$folder', '$name', $TTSYNC_EXIST );" #-> handle in future: ";'()" done exit 0 } function md5_rm() { cat $md5 | while read line; do #for each line in md5 local md5=$(echo $line | cut -c -32) local path=$(echo $line | cut -c 33- | sed 's/^\ //g') local relrevpath=$(echo $path | sed "s|^$moviedir||g" | sed 's|^/||g' | sed 's|/$||g' | rev) local name=$(echo $relrevpath | cut -d '/' -f 1 | rev) local folder=$(echo $relrevpath | cut -d '/' -f 2- | rev) db_query "DELETE FROM File WHERE MD5='$md5' AND Folder='$folder' AND Name='$name';" #-> handle in future: ";'()" done exit 0 } function md5_in_del() { cat $md5 | while read line; do #for each line in md5 local md5=$(echo $line | cut -c -32) local path=$(echo $line | cut -c 33- | sed 's/^\ //g') local relrevpath=$(echo $path | sed "s|^$moviedir||g" | sed 's|^/||g' | sed 's|/$||g' | rev) local name=$(echo $relrevpath | cut -d '/' -f 1 | rev) local folder=$(echo $relrevpath | cut -d '/' -f 2- | rev) db_query "UPDATE File SET TTSync=$TTSYNC_DEL WHERE MD5='$md5' AND Folder='$folder' AND Name='$name';" #-> handle in future: ";'()" done exit 0 } function md5_out_exist() { db_query "SELECT CONCAT(MD5, ' ', ' ' ,'$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_EXIST OR TTSync=$TTSYNC_BACKUP;" >> $md5 exit 0 } function md5_out_del() { db_query "SELECT CONCAT(MD5, ' ', ' ' ,'$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_DEL;" >> $md5 exit 0 } # help functions # db_query <query> -> result function db_query() { local args="-sN" #no headers, no grid args+=" -h$dbhost" args+=" -u$dbuser" [ -n "$dbpwd" ] && args+=" -p$dbpwd" args+=" $dbname" echo $@ | mysql $args } # db_exist_md5 <md5> -> true/false 0/1 function db_exist_md5() { result=($(db_query "SELECT COUNT(md5) FROM File WHERE File.MD5 LIKE '$1';")) if [ "${result[2]}" -gt "0" ]; then echo true return $TRUE else echo false return $FALSE fi } # db_F-ID_getPath <F-ID> -> <Path> function db_id_getPath() { db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE ID=$1;" } case "$mode" in "a") #in_add md5_in_add ;; "r") #rm md5_rm ;; "d") md5_in_del ;; "ee" | "e" ) md5_out_exist ;; "ed" ) md5_out_exist ;; *) echo "wrong arguments" echo "" help ;; esac