Veja como eu abordaria isso:
-
Crie uma função que gere globs para nomes de arquivos com base no requisito (qualquer caractere pode aparecer como maiúscula ou minúscula).
-
Modifique o loop para que o
scp
use o glob como o nome do arquivo remoto e o nome do arquivo já com o nome do arquivo local.
Isso criará a mesma conexão scp por arquivo, por computador, como você faz atualmente, mas a globbing vai pegar o arquivo remoto, não importa como ele seja "encaixado".
Aqui está a função (bash-specific):
function ul {
# for each character in $1, convert it to upper and lower case, then
# enclose it in [ ]
out=
for (( i=0; i< ${#1}; i++ ))
do
c=${1:$i:1}
if [[ "$c" =~ ^[[:alpha:]]$ ]]
then
uc=${c^}
lc=${c,}
out="${out}[${uc}${lc}]"
else
out="${out}${c}"
fi
done
printf "%s" "$out"
}
Então, você coloca isso no mesmo script ou em alguma área comum que é originada.
Para demonstrar seu uso:
$ g=$(ul system.dbf)
$ echo "$g"
[Ss][Yy][Ss][Tt][Ee][Mm].[Dd][Bb][Ff]
Para o passo 2, foi assim que modifiquei o seu loop inner :
for file_name in ${file_list[@]}; do
g=$(ul "$file_name")
remote_file=${remote_path}${computer_name}/${dow}/CustomerData/system/${g}
local_file=${working_directory}${file_name}
echo $local_file
scp -i $ID $USER@$HOST:$remote_file $local_file
chmod 0777 ${local_file}
done
Adicionei a designação g=
e a designação remote_file (no final da linha).