Copy more reliably when path change is not set

This commit is contained in:
Vincent Riquer 2013-05-25 15:35:04 +02:00
parent bb484454a6
commit 055ba6dec0
2 changed files with 57 additions and 34 deletions

View File

@ -43,42 +43,37 @@ copyFiles_action() {
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[@]} ))
if [ -n "${renamepath["$destination"]}" ]
then
destdir="$(guessPath)" || continue
else
destdir="${destinationpath["$destination"]}/"
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
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
done
echo 'COMMIT;' >&3
echo -e "\rCopied ${done:-0} of $count files.\033[K"

28
lib/copy/guessPath Normal file
View File

@ -0,0 +1,28 @@
#!/bin/bash
guessPath() {
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
echo "${filename%/*}"
else
return 1
fi
}