Este é um código estúpido. Primeiro eu reescrevo para que isso se torne óbvio (acrescento citações também):
for j in *.* ; do
target_file="../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}"
cp "$j" "$target_file"
sed "s/$name-S/$name-S$i/" "$j" >"$target_file"
done
Ou seja. um arquivo é copiado e, imediatamente após, o novo arquivo é sobrescrito. Isso é feito para todos os arquivos cujo nome contenha um ponto (mas provavelmente não no início; depende (em bash
) da configuração de dotglob
).
O caminho do arquivo de destino é construído como:
-
Coloque em outro diretório.
-
Apague a extensão do arquivo (todas as partes dele, ou seja, tudo a partir do primeiro ponto).
-
Adicione o número
i
e depois a extensão antiga.
A chamada sed
substitui apenas a primeira ocorrência (limitação intencional?) de $name-S
(ou seja, sua expansão) em uma linha por $name-S$i
(sua expansão novamente).