shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Localizar, trocar extensão e copiar arquivo


From: Gentil de Bortoli Júnior
Subject: Re: [shell-script] Localizar, trocar extensão e copiar arquivo
Date: Sat, 11 Feb 2006 17:19:18 -0200

On 2/11/06, Joao Morais <address@hidden> wrote:
> Preciso localizar alguns arquivos, trocar a extensão e utilizar como
> parâmetro do cp. Segue o que eu tenho aqui:
>
> for ResFile in $(find . -name "*.dpk" -type f | sed 's/\.dpk$/\.res/g')
> do
>    cp -f "${SourceFile}" "${ResFile}"
> done
>
> Funciona que é um espetáculo, mas o "for" recebe os arquivos separados
> por espaço em branco, então se eu tenho um diretório ou um arquivo com
> brancos no nome (mania de usuário Windows), o script não funciona.

> Outra:
>
> $ find . -name "*.dpk" -type f | sed 's/\.dpk$/\.res/g' | e...
>
> aqui eu não tenho como passar a saída do sed para o cp (ou tenho?).
>
> Bom mesmo é usar o parâmetro exec do find. Vamos tentar:
>
> $ find . -name "*.dpk" -type f \
>   -exec cp -f "${SourceFile}" "$(echo {} | sed 's/\.dpk$/\.res/g')" \;
>
> mas aqui o {} do exec está dentro de outro processo e não vira nome de
> arquivo.
>
> Alguma outra dica? Pode ser elegante ou não.

João, estou com um pouco de sono. Portanto desculpe se entendi mal. :)
Pelo que percebi, você quer renomear todos os arquivos .dpk para .res. É isso?

Se for, dá para usar uma solução com o rename. Postei algo parecido ontem.

Se for para usar uma solução mais genérica, eu faria assim:

for file in *.dpk; do
    mv "${file}" "$(basename ${file} .dpk)".res
done

Uma outra alternativa, usando o sed. A expressão não está legal, mas a idéia
funciona:

$ ls *.dpk | sed 's#\(.*\).dpk#mv \1.dpk \1.res#' | bash

[]s
--
Gentil de Bortoli Júnior
Chave GPG: http://gentil.bortoli.com.br/gpg

"There Is No Gene For The Human Spirit"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]