126 lines
3.0 KiB
Bash
126 lines
3.0 KiB
Bash
#!/bin/bash
|
|
copyFiles_action() {
|
|
(( cron )) || echo -n $'Copying files...\033[K'
|
|
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::}
|
|
(( count++ ))
|
|
(( cron )) || printf '\b\b\b\b%3i%%' $(( (count * 100) / ${#copyfiles[@]} ))
|
|
if [ -n "${destinationrenamepath["$destination"]}" ]
|
|
then
|
|
destdir="$(guessPath)"
|
|
guessstatus=$?
|
|
case $guessstatus in
|
|
1)
|
|
continue
|
|
;;
|
|
2)
|
|
(( postponed++ ))
|
|
continue
|
|
;;
|
|
esac
|
|
else
|
|
destdir="${destinationpath["$destination"]}/"
|
|
if [[ $sourcefilename =~ / ]]
|
|
then
|
|
destdir+=$(
|
|
sanitizeFile "${sourcefilename%%/*}" dir
|
|
)
|
|
part=${sourcefilename#*/}
|
|
while [[ $part =~ / ]]
|
|
do
|
|
destdir+="/$(
|
|
sanitizeFile "${part%%/*}" dir
|
|
)"
|
|
part=${part#*/}
|
|
done
|
|
if ! [ -d "$destdir" ]
|
|
then
|
|
mkdir -p "$destdir"
|
|
fi
|
|
fi
|
|
fi
|
|
if cp -a --reflink=always \
|
|
"$sourcepath/$sourcefilename" \
|
|
"$destdir" \
|
|
2>/dev/null \
|
|
|| 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]}"\
|
|
fat32compat \
|
|
${destinationfat32compat["$destination"]}\
|
|
ascii \
|
|
${destinationascii["$destination"]}\
|
|
last_change \
|
|
$lastchange \
|
|
<<-EOWhere
|
|
id = $destfileid
|
|
EOWhere
|
|
(( done++ ))
|
|
fi
|
|
done
|
|
echo 'COMMIT;' >&3
|
|
if (( count ))
|
|
then
|
|
(( cron )) || echo -n $'\r'
|
|
if (( count ))
|
|
then
|
|
echo -n "Copied ${done:-0} of $count" \
|
|
"files${postponed+ ($postponed postponed)}."
|
|
(( cron )) || echo -en "\033[K"
|
|
echo
|
|
else
|
|
(( cron )) || echo -n $'\r\033[K'
|
|
fi
|
|
unset count done
|
|
}
|