Buscar arquivos e adicionar uma string [RESOLVIDO]

1. Buscar arquivos e adicionar uma string [RESOLVIDO]

Eduardo Antonio Marcial Marques
eduardomarcial

(usa openSUSE)

Enviado em 11/07/2017 - 12:05h

Galera, queria saber se tem como criar um script para pesquisar em varias pastas Desktops um arquivo de conexão de ts existente em cada uma delas e editar todas elas.

Nesse arquivo abre-se uma conexão de ts e quero adicionar nelas um parâmetro, "-n <nome>" sendo que <nome> deverá ser igual ao login fornecido em -u <nome>.

Antes:
Exec=rdesktop -T "Conexao Filiais" -u nome -p 12345 -ddominio -g 1024x740 -k pt-br 192.168.2.22

Depois:
Exec=rdesktop -T "Conexao Filiais" -n nome -u nome -p 12345 -ddominio -g 1024x740 -k pt-br 192.168.2.22



  


2. MELHOR RESPOSTA

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 12/07/2017 - 11:07h

Bem, vamos lá. Tem como sim.
Talvez eu tenha entendido errado o ambiente que você descreveu, então o meu loop procurando pelos arquivos não atenda a sua necessidade. Mas a edição das linhas que você quer irá funcionar.
Pelo que entendi, você tem diversos usuários na estação de trabalho.
Dentro da pasta da Área de trabalho de cada usuário você tem arquivos.desktop (lançadores de aplicações, eu deduzi isso pela sintaxe Exec= ) que iniciam o rdesktop com uma configuração específica.

Eu fiz um loop que ira entrar em cada uma das pastas Desktop e realizar uma busca por todos os arquivos.desktop.
A cada arquivo encontrado, ele ira verificar com os comandos if e grep se encontra a palavra rdesktop dentro.
Caso o if seja positivo, ele ira determinar qual o nome do usuário dentro da configuração pelo comando cut.
Após isso ele usara o comando sed para substituir as ocorrências de "-u nomedeusuário -p" por "-n $variavelcontendoonomedousuário -u $variavelcontendoonomedousuário -p"

Bem, tem um problema relacionado a espaçamentos nos nomes das pastas homes dos usuários, e se for um sistema em português (Área de Trabalho). Bem, acho que você consegue contornar isso. Só ajustar ao seu ambiente.

  1 #!/bin/bash
2 # Script by CB Patrick.
3 for target in $(ls -f1 /home/*/Desktop/*.desktop); do
4 if grep rdesktop $target &> /dev/null; then
5 user=$(cut -d" " -f6 $target)
6 sed -i "s/-u .* -p/-n $user -u $user -p/" $target
7 fi
8 done


Você pode usar o & também dentro do sed para substituir algo pelo próprio padrão encontrado..
sed -i "s/-u .* -p/-n $user &/" $target
Assim ele acrescentará o próprio conteúdo encontrado dentro de "-u nome -p" na substituição

http://goo.gl/g6NiFp

3. Re: Buscar arquivos e adicionar uma string

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 11/07/2017 - 13:28h

Sim.
https://www.youtube.com/playlist?list=PLcUid3OP_4OW-rwv_mBHzx9MmE5TxvvcQ


To bolando um script aqui só pra brincar mesmo, mas se quiser ir por conta própria a playlist acima é excelente para aprender a usar o sed.


http://goo.gl/g6NiFp


4. Re: Buscar arquivos e adicionar uma string [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/07/2017 - 15:01h

eduardomarcial escreveu:

Galera, queria saber se tem como criar um script para pesquisar em varias pastas Desktops um arquivo de conexão de ts existente em cada uma delas e editar todas elas.

Nesse arquivo abre-se uma conexão de ts e quero adicionar nelas um parâmetro, "-n <nome>" sendo que <nome> deverá ser igual ao login fornecido em -u <nome>.

Antes:
Exec=rdesktop -T "Conexao Filiais" -u nome -p 12345 -ddominio -g 1024x740 -k pt-br 192.168.2.22

Depois:
Exec=rdesktop -T "Conexao Filiais" -n nome -u nome -p 12345 -ddominio -g 1024x740 -k pt-br 192.168.2.22


Eduardo, boa tarde.
Pelo que endendi, vc deseja "duplicar o campo " [-u nome] . . .
Para isso, pode ser usado o awk...
Exemplo:
awk -i inplace '{print $1,$2,$3,$4,$5,$6,"-n",$6,$7,$8,$9,$10,$11,$12,$13,$14}' arquivo
Quanto a "busca" do arquivo, use o "find" ou o "grep".
Segue exemplo com o grep, já que não tenho mais informações quanto ao arquivo, para utilizar o find...
for ARQ in $(egrep -ri '^Exec=rdesktop'|cut -d: -f1);do awk -i inplace '{print $1,$2,$3,$4,$5,$6,"-n",$6,$7,$8,$9,$10,$11,$12,$13,$14}' $ARQ;done
É isso....
Att.:
Marcelo Oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts