Sei que é mais fácil criar o arquivo do que editar seu conteúdo.
Veja o pseudo-código para exemplo didático:
#!/bin/bash
x0=100
y0=0
# incrementos
x_inc=100
y_inc=5
y_step=5
# quantidade de coordenadas desejadas
n_coords=50
for i in `seq 0 $(( n_coords - 1 ))`; do
x=$(( x0 + i*x_inc ))
y=$(( y0 + (i/y_step)*y_inc ))
echo "X:$x Y:$y" > teste/$i
done
Explicação - Para fazer os cálculos. Eu incremento o valor de Y a cada 5 iterações, na razão de 5 unidades.
x0 - é o valor inicial de x fornecido como 100
y0 - é o valor inicial de y fornecido como 0
x_inc - é o quanto x tem o valor incrementado a cada salto fornecido como 100
y_inc - é o quanto y tem o valor incrementado a cada salto fornecido como 5
y_step - é o número de iterações antes de haver um incremento de y fornecido como 5
Para i no intervalo [0, 49]:
Por fim, a operação se resume com x e y .
Aqui a dúvida seria manipular vários arquivos em uma única pasta (com sed se possível) fazendo operações aritméticas.
Table Icon
Type: Program
Caption: Terminal
Command: aterm -T “Bash” -e /bin/bash
Icon: /home/user/.xtdesktop/Aterm.png
MenuCommand1: Aterm as Super User: aterm -cr red -e sudo su
X: 8
Y: 5
Status: anchor
end
Dá para fazer a substituição caso seja necessário usando o sed?
Ou por sinal, acham que não é possível, acham que awk seria mais adequado!?
Como ja citado - “Sei que é mais fácil criar o arquivo do que editar seu conteúdo”.
Resolvi colocar aqui o que havia feito dantes de postar a pergunta somente pra registrar e talvez ajudar mais alguém que queira entender ou apreender até mesmo refazer a engenharia reversa/inversa como queira chamar a lógica de programação aqui apresentada.
Breve Explicação - O que esta solução faz é, nada mais e nada menos do que “re-criar” os arquivos .lnk necessários que carrega o ícone sobre o software
e aponta para binário executável do mesmo.
Confira:
#!/bin/sh
DIR=/home/$USER/.xtdesktop
MONITOR=`xdpyinfo | grep 'dimensions:'`
if [ -n "$MONITOR" ]
then
RESOLUCAO_EM_USO=`echo $MONITOR | awk '{print $2}'`
fi
A=`echo $MONITOR | awk '{print $2}' | cut -d'x' -f2`
B='1024'
if [ $A -lt $B ]
then
# Se RESOLUCAO_EM_USO for menor que 1024x768
sed "9s/.*/Cols: 5/ ; 12s/.*/TopMargin: 4/" -i $DIR/xtdeskrc
elif [ $A -gt $B ]
then
# Se RESOLUCAO_EM_USO for maior que 1024x768
sed "9s/.*/Cols: 5/ ; 12s/.*/TopMargin: 6/" -i $DIR/xtdeskrc
elif [ $A -eq $B ]
then
# Se RESOLUCAO_EM_USO for igual a 1024x768
sed "9s/.*/Cols: 5/ ; 12s/.*/TopMargin: 8/" -i $DIR/xtdeskrc
fi
function ICODESK(){
cd $DIR
QTD=$(ls -1 *.{jpg,png,gif,bmp,xpm} | wc -l)
NUM=0
for ARQ in *.*
do
FILE=$(echo $ARQ | tr 'A-Z' 'a-z')
mv -f $ARQ $FILE
done
ls -1 *.{jpg,png,gif,bmp,xpm} | while read EXT2
do
cat xtdeskpos/$1 | while read LINHA
do
if [ $NUM -lt $QTD ]
then
echo -e "Table Icon" > ${NUM%.*}
echo -e "\tCaption: ${EXT2%.*}" >> ${NUM%.*}
echo -e "\tIcon: .xtdesktop/$EXT2" >> ${NUM%.*}
echo -e "\tType: Program" >> ${NUM%.*}
echo -e "\tCommand: `which ${EXT2%.*}` `which ${EXT2/-*.*/}`" >> ${NUM%.*}
echo -e "\tMenuCommand1: Administrador: sudo `which ${EXT2%.*}` `which ${EXT2/-*.*/}`" >> ${NUM%.*}
A=$(echo $LINHA | cut -d 'x' -f1)
B=$(echo $LINHA | cut -d 'x' -f2)
echo -e "\tX: $A \n\tY: $B" >> ${NUM%.*}
echo -e "\tStatus: anchor" >> ${NUM%.*}
echo -e "end" >> ${NUM%.*}
mv -f $NUM ${EXT2%.*}.lnk
((NUM=$NUM+1))
fi
done
let NUM=`expr $NUM+1`
done
# ls -1 ./*{png,lnk} | sed -r 's/\<./\U&/g'
pkill xtdesk 2>/dev/null &
# for A in *.{png,gif,lnk}; do F=$(echo $A | sed -r 's/\<./\U&/g'); mv -f $A $F; done
cd ..
xtdesk &
}
ICODESK $RESOLUCAO_EM_USO
NOTA - Contudo feito, ainda ha o que fazer nesse shell script, uma vez que, se o binário referente ao aplicativo/programa tiver sido instalado em um diretório a parte, fora do escopo da variável de ambiente (PATH) compatível ao padrão POSIX o ícone da área de trabalho ficará inacessível, obrigando assim o usuário editar manualmente.
Quando surgi um tempo a mais irei deixar outra resposta com o modo que encontrei de alterar sem precisar recriar [co-criar] os arquivos *.lnk.