[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Ajuda em script para separar arquivo binario de scrip
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] Ajuda em script para separar arquivo binario de script |
Date: |
Tue, 10 Jul 2007 22:41:44 -0300 |
Salviano, alem da dica do mop, da uma olhada se esse one-liner funciona no
teu caso:
#!/bin/bash
AWKCMD='/Bourne/{print $1}'
SEDCMD='1s|/sh|/bash|;2aexport LC_ALL=C;'
find /usr/local/bin | xargs file | awk -F ':' "${AWKCMD}" | xargs sed
-i.old"${SEDCMD}"
Vamos destrinchar esse one liner:
1) o find imprime o caminho completo de todos os arquivos.
2) o xargs manda a tropa para o comando file, que imprime o resultado de
todos (util pra evitar "arg list too long")
3) o awk faz uso da variavel AWKCMD, que foi a forma que eu encontrei pra
deixar a linha legivel sem apelar para a continuação na linha segunda via
'\' -- acho complicado as vezes. toda vez que for encontrada a palavra
Bourne, o primeiro campo separado por : sera impresso!
4) mando pro xargs de novo. ele vai enviar a tropa toda pro sed -- este sed
vai aplicar as modificações contidos em SEDCMD que, por sua vez, ira salvar
nos proprios arquivos (opção -i) e um arquivo de mesmo nome mas com extensão
.old no final sera gerado com a versão antiga do script
ufa... 4 pipes! podia ser mais, ou menos, enfim...
aqui segue o one line completo, acho que não é tão ilegivel assim.
find /usr/local/bin | xargs file | awk -F ':' ''/Bourne/{print $1}'' | xargs
sed -i.old '1s|/sh|/bash|;2aexport LC_ALL=C;'
[]´s Tiago
On 7/10/07, Salviano A. Leão <address@hidden> wrote:
>
> Olá, a todos estou com dificuldades em um
> script muito simples, entretanto, não localizei o
> problema.
>
> Tenho no diretorio /usr/locl/bin os seguites arquivos:
>
> -rwxr-xr-x 1 salviano salviano 1597856 2007-07-10 13:21 codecov
> -rwxr-xr-x 1 salviano salviano 22143225 2007-07-10 13:21 fortcom
> -rwxr-xr-x 1 salviano salviano 141997 2007-07-10 13:22 fpp
> -rwxr-xr-x 1 salviano salviano 1116 2007-07-10 13:22 ifc
> -rwxr-xr-x 1 salviano salviano 621786 2007-07-10 13:22 ifcbin
> -rwxr-xr-x 1 salviano salviano 0 2007-07-10 13:22 ifc.cfg
> -rwxr-xr-x 1 salviano salviano 1124 2007-07-10 13:22 ifort
> -rwxr-xr-x 1 salviano salviano 1003416 2007-07-10 13:22 ifortbin
> -rwxr-xr-x 1 salviano salviano 0 2007-07-10 13:22 ifort.cfg
> -rwxr-xr-x 1 salviano salviano 995 2007-07-10 13:22 ifortvars.csh
> -rwxr-xr-x 1 salviano salviano 1183 2007-07-10 13:22 ifortvars.sh
> -rwxr-xr-x 1 salviano salviano 231577 2007-07-10 13:22 map_opts
> -rwxr-xr-x 1 salviano salviano 80480 2007-07-10 13:22 profdcg
> -rwxr-xr-x 1 salviano salviano 126997 2007-07-10 13:22 profmerge
> -rwxr-xr-x 1 salviano salviano 99098 2007-07-10 13:22 proforder
> -rwxr-xr-x 1 salviano salviano 1093 2007-07-10 13:22 profrun
> -rwxr-xr-x 1 salviano salviano 741543 2007-07-10 13:22 profrun.bin
> -rwxr-xr-x 1 salviano salviano 1785822 2007-07-10 13:22 pronto_tool
> -rwxr-xr-x 1 salviano salviano 657582 2007-07-10 13:22 tselect
> -rwxr-xr-x 1 salviano salviano 15461 2007-07-10 13:22 uninstall.sh
> -rwxr-xr-x 1 salviano salviano 73227 2007-07-10 13:22 xiar
> -rwxr-xr-x 1 salviano salviano 120443 2007-07-10 13:22 xild
>
> Gostaria de fazer alumas modificacoes somente nos scripts e estou
> usando os seguinte script para selecionar somente os scripts:
>
> #!/bin/sh
> for arq in `ls /usr/local/bin/*`
> do
> tipo="`file ${arq} | cut -f2 -d : | cut -f2 -d " "`"
> if [ "$tipo"=="Bourne" ]
> then
> echo "${arq} eh do tipo ${tipo} sera movido"
> mv ${arq} ${arq}.backup
> cat ${arq}.backup | sed -e 's-\#\!/bin/sh-\#\!/bin/bash-' -e '2a
> export LC_ALL=C;' > ${arq}
> chmod -c 0755 ${arq}
> rm -f ${arq}.backup
> fi
> done
>
> Mas o que ocorre eh que ele ignora o if. Nao entendo porque
> ele esta ignorando o if. eh como se todos os arquivos fossem
> scripts.
> A variável $tipo retorna Bourne ou ELF, mas o if não está funcionando,
> já dei uma olhada na estrutura mas não descobri porque ele não funciona.
>
> Se alguém poder me ajudar, agradeço.
>
> Salviano
>
>
--
Tiago B Peczenyj
Linux User #405772
http://peczenyj.blogspot.com/
[As partes desta mensagem que não continham texto foram removidas]