#!/bin/bash copyFiles_action() { echo -n "Copying files... " echo ' SELECT source_files.filename, source_files.last_change, destinations.id, destinations.name, destination_files.id FROM source_files INNER JOIN destination_files ON source_files.id = destination_files.source_file_id INNER JOIN destinations ON destination_files.destination_id=destinations.id INNER JOIN mime_type_actions ON mime_type_actions.id = source_files.mime_type WHERE CAST(destination_files.last_change AS TEXT) <> CAST(source_files.last_change AS TEXT) AND mime_type_actions.destination_id = destinations.id AND mime_type_actions.action = 2; SELECT "AtOM:NoMoreFiles";' >&3 read -u4 line while ! [[ $line = AtOM:NoMoreFiles ]] do copyfiles+=("$line") read -u4 line done echo 'BEGIN TRANSACTION;' >&3 for copyfile in "${copyfiles[@]}" do sourcefilename=${copyfile%%::AtOM:SQL:Sep::*} sourcedir=${sourcefilename%/*} rest="${copyfile#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::" lastchange=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} destinationid=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} destination=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} destfileid=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} echo 'SELECT IFNULL( ( SELECT destination_files.filename FROM destination_files INNER JOIN source_files ON destination_files.source_file_id=source_files.id INNER JOIN mime_type_actions ON mime_type_actions.id=source_files.mime_type INNER JOIN destinations ON destinations.id=destination_files.destination_id WHERE destinations.id = '$destinationid' AND source_files.filename LIKE "'"${sourcedir//\"/\"\"}"'/%" AND mime_type_actions.action = 1 LIMIT 1 ),"AtOM:NotFound"); '>&3 read -u4 filename if [[ $filename != AtOM:NotFound ]] then destdir=${filename%/*} if cp -al "$sourcepath/$sourcefilename" "$destdir" 2>/dev/null\ || cp -a "$sourcepath/$sourcefilename" "$destdir" then Update destination_files \ filename "$destdir/${sourcefilename##*/}"\ rename_pattern "${destinationrenamepath[$destination]}/${destinationrename[$destination]}:${destinationfat32compat["$destination"]}"\ last_change $lastchange \ <<-EOWhere id = $destfileid EOWhere (( done++ )) fi fi (( count++ )) printf '\b\b\b\b%3i%%' $(( (count * 100) / ${#copyfiles[@]} )) done echo 'COMMIT;' >&3 echo -e "\rCopied ${done:-0} of $count files.\033[K" unset count done }