filenames and/or tags may contain |

This commit is contained in:
Vincent Riquer 2013-05-02 02:23:24 +02:00
parent 28b11a77ea
commit 1fa431cc5f
8 changed files with 204 additions and 196 deletions

148
atom
View File

@ -144,8 +144,8 @@ removed=0
read -u4 line read -u4 line
until [[ $line == AtOM:NoMoreFiles ]] until [[ $line == AtOM:NoMoreFiles ]]
do do
id=${line%|*} id=${line%::AtOM:SQL:Sep::*}
filename=${line#*|} filename=${line#*::AtOM:SQL:Sep::}
if [ -n "$filename" ] if [ -n "$filename" ]
then then
if rm -f "$filename" if rm -f "$filename"
@ -220,12 +220,12 @@ done
echo 'BEGIN TRANSACTION;' >&3 echo 'BEGIN TRANSACTION;' >&3
for line in "${tagfiles[@]}" for line in "${tagfiles[@]}"
do do
sourcefileid=${line%%|*} sourcefileid=${line%%::AtOM:SQL:Sep::*}
rest=${line#*|} rest=${line#*::AtOM:SQL:Sep::}
lastchange=${rest%%|*} lastchange=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
mimetype=${rest%%|*} mimetype=${rest%%::AtOM:SQL:Sep::*}
filename=${rest#*|} filename=${rest#*::AtOM:SQL:Sep::}
echo -en "\rTags: $((++count*100/filecount))%" echo -en "\rTags: $((++count*100/filecount))%"
if (( count % 1000 == 0 )) if (( count % 1000 == 0 ))
then then
@ -376,7 +376,7 @@ echo '
read -u4 line read -u4 line
while ! [[ $line = AtOM:NoMoreFiles ]] while ! [[ $line = AtOM:NoMoreFiles ]]
do do
decodefiles+=("$line|") decodefiles+=("$line::AtOM:SQL:Sep::")
read -u4 line read -u4 line
done done
echo -n 'Creating tasks... ' echo -n 'Creating tasks... '
@ -384,41 +384,41 @@ echo -n 'Creating tasks... '
echo 'BEGIN TRANSACTION;' >&3 echo 'BEGIN TRANSACTION;' >&3
for line in "${decodefiles[@]}" for line in "${decodefiles[@]}"
do do
fileid=${line%%|*} fileid=${line%%::AtOM:SQL:Sep::*}
rest=${line#*|} rest=${line#*::AtOM:SQL:Sep::}
filename=${rest%%|*} filename=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
mimetype=${rest%%|*} mimetype=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destination=${rest%%|*} destination=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfileid=${rest%%|*} destfileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
rate=${rest%%|*} rate=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
channels=${rest%%|*} channels=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
bitrate=${rest%%|*} bitrate=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
genre=${rest%%|*} genre=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
albumartist=${rest%%|*} albumartist=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
year=${rest%%|*} year=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
album=${rest%%|*} album=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
disc=${rest%%|*} disc=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
artist=${rest%%|*} artist=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
track=${rest%%|*} track=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
title=${rest%%|*} title=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
composer=${rest%%|*} composer=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
performer=${rest%%|*} performer=${rest%%::AtOM:SQL:Sep::*}
unset rest unset rest
decodeFile decodeFile
getDestDir getDestDir
@ -647,32 +647,32 @@ do
echo -n "$destination: rename pattern changed, renaming files... " echo -n "$destination: rename pattern changed, renaming files... "
while [[ $line != AtOM:NoMoreFiles ]] while [[ $line != AtOM:NoMoreFiles ]]
do do
oldfilename=${line%%|*} oldfilename=${line%%::AtOM:SQL:Sep::*}
rest=${line#*|}'|' rest=${line#*::AtOM:SQL:Sep::}'::AtOM:SQL:Sep::'
destfileid=${rest%%|*} destfileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
filename=${rest%%|*} filename=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
album=${rest%%|*} album=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
albumartist=${rest%%|*} albumartist=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
artist=${rest%%|*} artist=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
composer=${rest%%|*} composer=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
disc=${rest%%|*} disc=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
genre=${rest%%|*} genre=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
performer=${rest%%|*} performer=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
title=${rest%%|*} title=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
track=${rest%%|*} track=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
year=${rest%%|*} year=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
if [ -n "$oldfilename" -a -f "$oldfilename" ] if [ -n "$oldfilename" -a -f "$oldfilename" ]
then then
getDestDir getDestDir
@ -720,10 +720,10 @@ done
echo 'BEGIN TRANSACTION;' >&3 echo 'BEGIN TRANSACTION;' >&3
for line in "${lines[@]}" for line in "${lines[@]}"
do do
id=${line%%|*} id=${line%%::AtOM:SQL:Sep::*}
rest=${line#*|} rest=${line#*::AtOM:SQL:Sep::}
filename=${rest%%|*} filename=${rest%%::AtOM:SQL:Sep::*}
oldfilename=${rest#*|} oldfilename=${rest#*::AtOM:SQL:Sep::}
if [[ $oldfilename != $filename ]] && [ -f "$oldfilename" ] if [[ $oldfilename != $filename ]] && [ -f "$oldfilename" ]
then then
rm -f "$oldfilename" rm -f "$oldfilename"

View File

@ -31,15 +31,15 @@ copyFiles_action() {
echo 'BEGIN TRANSACTION;' >&3 echo 'BEGIN TRANSACTION;' >&3
for copyfile in "${copyfiles[@]}" for copyfile in "${copyfiles[@]}"
do do
sourcefilename=${copyfile%%|*} sourcefilename=${copyfile%%::AtOM:SQL:Sep::*}
sourcedir=${sourcefilename%/*} sourcedir=${sourcefilename%/*}
rest="${copyfile#*|}|" rest="${copyfile#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::"
lastchange=${rest%%|*} lastchange=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destinationid=${rest%%|*} destinationid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfileid=${rest%%|*} destfileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
echo 'SELECT IFNULL( ( echo 'SELECT IFNULL( (
SELECT destination_files.filename SELECT destination_files.filename
FROM destination_files FROM destination_files

View File

@ -24,5 +24,6 @@ openDatabase() {
exec 3> >(tee -a $tempdir/debug.log >&5) exec 3> >(tee -a $tempdir/debug.log >&5)
fi fi
cat $schema >&3 cat $schema >&3
echo '.separator ::AtOM:SQL:Sep::' >&3
echo 'PRAGMA foreign_keys = ON;' >&3 echo 'PRAGMA foreign_keys = ON;' >&3
} }

View File

@ -27,5 +27,12 @@ sanitizeFile() {
string=${string/%+(.)/} string=${string/%+(.)/}
fi fi
fi fi
# Not exactly filename sanitity, but these will make the script fail in
# a decorative way..
string="${string//&/\\&}"
strint="${string//;/\\;}"
# And these would exhibit strange behaviors
string="${string//\[/\\\[}"
string="${string//\]/\\\]}"
echo "$string" echo "$string"
} }

View File

@ -12,16 +12,16 @@ gettaskinfos() {
WHERE id='$1'; WHERE id='$1';
' >&3 ' >&3
read -u4 line read -u4 line
taskid=${line%%|*} taskid=${line%%::AtOM:SQL:Sep::*}
rest="${line#*|}|" rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::"
sourcefileid=${rest%%|*} sourcefileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
required=${rest%%|*} required=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cleanup=${rest%%|*} cleanup=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfileid=${rest%%|*} destfileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfilename=${rest%%|*} destfilename=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
} }

View File

@ -69,78 +69,78 @@ master() {
else else
(( ++active )) (( ++active ))
read -u4 line read -u4 line
taskid=${line%%|*} taskid=${line%%::AtOM:SQL:Sep::*}
rest="${line#*|}|" rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::"
sourcefileid=${rest%%|*} sourcefileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
required=${rest%%|*} required=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg=("${rest%%|*}") cmd_arg=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cmd_arg+=("${rest%%|*}") cmd_arg+=("${rest%%::AtOM:SQL:Sep::*}")
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
cleanup=${rest%%|*} cleanup=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfileid=${rest%%|*} destfileid=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
destfilename=${rest%%|*} destfilename=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
for key in ${!cmd_arg[@]} for key in ${!cmd_arg[@]}
do do
[ -z "${cmd_arg[key]}" ] && unset cmd_arg[key] [ -z "${cmd_arg[key]}" ] && unset cmd_arg[key]

View File

@ -112,8 +112,8 @@ getdstfiles() {
done done
for line in "${lines[@]}" for line in "${lines[@]}"
do do
fileid=${line%|*} fileid=${line%::AtOM:SQL:Sep::*}
filename=${line#*|} filename=${line#*::AtOM:SQL:Sep::}
echo $'\t'"$filename" echo $'\t'"$filename"
(( rename )) && echo -n $'\t' (( rename )) && echo -n $'\t'
(( rename )) && renameFile (( rename )) && renameFile
@ -149,12 +149,12 @@ do
done done
for line in "${lines[@]}" for line in "${lines[@]}"
do do
fileid=${line%%|*} fileid=${line%%::AtOM:SQL:Sep::*}
rest="${line#*|}|" rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::"
filename=${rest%%|*} filename=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
mimetype=${rest%%|*} mimetype=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
dest=$sourcepath dest=$sourcepath
case "$mimetype" in case "$mimetype" in
'audio/mpeg') 'audio/mpeg')

View File

@ -140,33 +140,33 @@ done
for line in "${lines[@]}" for line in "${lines[@]}"
do do
missing=() missing=()
filename=${line%%|*} filename=${line%%::AtOM:SQL:Sep::*}
rest="${line#*|}|" rest="${line#*::AtOM:SQL:Sep::}::AtOM:SQL:Sep::"
(( ${checks[genre]} )) && [ -z "${rest%%|*}" ] && missing+=( "Genre" ) (( ${checks[genre]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Genre" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[albumartist]} )) && [ -z "${rest%%|*}" ] && missing+=( "AlbumArtist" ) (( ${checks[albumartist]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "AlbumArtist" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[year]} )) && [ -z "${rest%%|*}" ] && missing+=( "Year" ) (( ${checks[year]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Year" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[album]} )) && [ -z "${rest%%|*}" ] && missing+=( "Album" ) (( ${checks[album]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Album" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[disc]} )) && [ -z "${rest%%|*}" ] && missing+=( "Disc" ) (( ${checks[disc]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Disc" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[artist]} )) && [ -z "${rest%%|*}" ] && missing+=( "Artist" ) (( ${checks[artist]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Artist" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
track=${rest%%|*} track=${rest%%::AtOM:SQL:Sep::*}
(( ${checks[track]} )) && [ -z "$track" ] && missing+=( "Track" ) (( ${checks[track]} )) && [ -z "$track" ] && missing+=( "Track" )
if (( ${checks[tracktotal]} )) && ! [[ $track =~ / ]] if (( ${checks[tracktotal]} )) && ! [[ $track =~ / ]]
then then
missing+=( TrackTotal ) missing+=( TrackTotal )
fi fi
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[title]} )) && [ -z "${rest%%|*}" ] && missing+=( "Title" ) (( ${checks[title]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Title" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[composer]} )) && [ -z "${rest%%|*}" ] && missing+=( "Composer" ) (( ${checks[composer]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Composer" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
(( ${checks[performer]} )) && [ -z "${rest%%|*}" ] && missing+=( "Performer" ) (( ${checks[performer]} )) && [ -z "${rest%%::AtOM:SQL:Sep::*}" ] && missing+=( "Performer" )
rest=${rest#*|} rest=${rest#*::AtOM:SQL:Sep::}
echo "$filename: ${missing[@]}" echo "$filename: ${missing[@]}"
done done