#!/bin/bash # @author 6543 # @version 0.1 # @date 2019-02-07 ## Options/Parameter # [$1]: { #set enviroemnt readonly TRUE=1 #like readonly FALSE=0 #like readonly TTSYNC_EXIST=0 #file exist local readonly TTSYNC_BACKUP=1 #file exist local - backup exist readonly TTSYNC_REMOTE=2 #file exists remote - not used jet readonly TTSYNC_DEL=3 #local file deleted readonly globalconf="/etc/tt/global" } { #get options & args readonly mode=$(echo $1 | tr -d '-') moviedir="$1" [ -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="/" readonly DATE=$(date '+%Y-%m-%d') } { #db dbname="tt_test" dbhost="localhost" dbuser="root" dbpwd="" } function help() { #help menue echo "$0 is part of the TerabyteTerminator Project" echo "" echo "update-file-state [moviedir]" echo " moviedir: Is optional if it is already in the global config" exit 0 } [ "$mode" == "help" ] && help ########################### ## Programm Haupt Ablauf ## ########################### function main() { #cd to moviedir cd "$moviedir" #erselle zwei dateilisten list_tmp=$(mktemp -d) db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_EXIST OR TTSync=$TTSYNC_BACKUP;" > "$list_tmp/indb" find "$moviedir" -type f > "$list_tmp/exist" #find new files grep -vf "$list_tmp/indb" "$list_tmp/exist" > "$list_tmp/new" #all IDs wich an old check date: #db_query "SELECT ID FROM File Where TTCheck < '$DATE' OR TTCheck IS NULL;" ## dateiliste erstellen die mit DB abgeglichen wird ## alle die keien DB.PATH eintrag haben -> file_add ## Für alle existierenden Dateien: ## * Path=DB.PATH && TTSync == TTSYNC_DEL ## -> DB.Size != 0 && Size == DB.Size -> TTSYNC_DEL -> TTSYNC_EXIST // >>file_undel<< konsider other state ?!? ## -> DB.Size != 0 || Size != DB.Size -> compare if md5 is same ## -> Ja -> TTSYNC_DEL -> TTSYNC_EXIST // >>file_undel<< ## -> NA -> delete DB Entry ## * Path=DB.PATH && TTSync == TTSYNC_EXIST / TTSYNC_BACKUP ## -> DB.Size = 0 -> file_add_size ## -> Size != DB.Size -> compare if md5 is same ## -> Ja -> update file size (file_add_size) ## -> NA ## -> makr DB.FID = TTSYNC_DEL ## -> file_add // this is a new file ## * Path=DB.PATH && TTSync == TTSYNC_REMOTE ## -> DB.Size = 0 -> compare if md5 is same ## -> Ja ## -> update file size (file_add_size) ## -> TTSYNC_REMOTE to TTSYNC_BACKUP ## -> NA ## -> Size = DB.Size TTSYNC_REMOTE to TTSYNC_BACKUP ## -> Size != DB.Size // Error Remote CP incorect!!! ## alle nicht gecheckten path einträge in DB (fiels die nicht existieren) ## A: HDD kaput ## B: Absichtlich gelöscht ## hdd_check // ob eine HDD defekt ist bzw das mounten irgendwo fehlgeschlagen ist ## -> ja -> error mesage! ## -> na -> set DB.FID TTSYNC_DEL } ########################### ## help functions ######### ########################### ##check & prepair args [ -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="/" function md5_out_exist() { db_query "SELECT CONCAT(MD5, ' ', ' ' ,'$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_EXIST OR TTSync=$TTSYNC_BACKUP;" >> $md5list exit 0 } function md5_out_del() { db_query "SELECT CONCAT(MD5, ' ', ' ' ,'$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_DEL;" >> $md5list exit 0 } # file_size -> (du -b)/1024 [Kb] function file_size() { if [ -f "$1" ]; then echo $(($(du -b "$1" | cut -f 1)/1024)) else echo 0 fi } # db_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_F-ID_getPath -> function db_id_getPath() { db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE ID=$1;" } main #aufruf der main function (eig. programmstart)