161 lines
5.1 KiB
Bash
161 lines
5.1 KiB
Bash
#!/bin/bash
|
|
# @author 6543
|
|
# @version 0.1
|
|
# @date 2019-02-07
|
|
|
|
## Options/Parameter
|
|
# [$1]: <path to movie folder>
|
|
|
|
{ #set enviroemnt
|
|
readonly TRUE=1 #like <stdbool.h>
|
|
readonly FALSE=0 #like <stdbool.h>
|
|
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 <path> -> (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 <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 <F-ID> -> <Path>
|
|
function db_id_getPath() {
|
|
db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE ID=$1;"
|
|
}
|
|
|
|
|
|
|
|
main #aufruf der main function (eig. programmstart)
|