Попробуете ли вы следующее:
declare -A ihaveit # create an associative array
for f in *.jpg; do
(( ihaveit[$f]++ )) # set a mark for files at hand
done
while read -r f; do
[[ -z ${ihaveit[$f]} ]] && myDownload+=("$f")
# if the file in the SiteFiles.txt is not in my list
# then append it to the download list
done < SiteFiles.txt
echo "${myDownload[@]}" # see the result
Если вы предпочитаете одну строку, а имена файлов не содержат новых строк, вы также можете сказать что-то вроде:
comm -2 -3 <(sort SiteFiles.txt) <(ls -1 *.jpg | sort)
Обратите внимание, что парсинг вывода ls
в общем случае считается антипаттерном, и я не рекомендую использовать последний.