tente
for file in *"$foobar"*
do
dest="$(echo $file| sed -e 's/\(.*\)\.[^\.]*$/.csv/' )"
if test -f "$file"
then
/home/user/scriptModelise.pl "$file" >> /home/user/Documents/collectCSV/$dest
else
echo "no $foobar file"
fi
done
onde
-
\(.*\)\.[^\.]*$
captura um padrão com qualquer caractere, (fim do padrão) seguido por um ponto, sem ponto até o final da linha -
.csv
insere o padrão encontrado, adicione .csv -
*"$foobar"*
expandirá para litteral*foobar*
(com valor apropriado) se nenhum arquivo correspondente for encontrado. daí a necessidade detest -f "$file"
Editar:
-
\(.*\)\.[^\.]*$
(lado esquerdo: encontrando padrão (s))
dividida em (_ espaço reservado)
-
__.*__________
um padrão com qualquer caractere (o ponto tem um significado especial: qualquer caractere) -
__.*__\._______
um padrão com qualquer caractere, seguido por um ponto (o ponto de escape é um ponto simples) -
__.*__\.[^\.]*$
padrão com qualquer caractere, (fim do padrão) seguido por um ponto, sem ponto ([^\.]*
) até o final da linha (o sinal de dólar é especial para o final da linha) -
\(__\)__________
captura a primeira parte do padrão. -
.csv
(lado direito, o que fazer) -
____
corresponde ao que ficou dentro do primeiro
\( \)
,para o segundo e assim por diante, use
&
para todo o padrão.