On Fri, 8 Feb 2002, Joel Franco wrote:
> On Fri, Feb 08, 2002 at 05:17:41PM -0200, Antonio Alberto Lobato wrote: > > On Fri, 8 Feb 2002, Joel Franco wrote: > > > > > On Fri, Feb 08, 2002 at 01:31:05AM -0200, Antonio Alberto Lobato wrote: > > > > > > > > > > > > Oi, debiers. > > > > > > > > Na linha de comando abaixo, como fazer o find zerar os arquivos (apagar > > > > o conteúdo), e não criar um arquivo de nome {} ? O man ensina a usar a > > > > opção -exec mas não detalha a esse ponto. Já tentei usar backslash, > > > > quotes, double quotes em alguns pontos do comando e nada. > > > > > > > > $ find -type f -name algo -exec echo -n > {} \; > > > > > > $ for i in `find -type f -name algo`; do > > > rm $i > > > touch $i > > > done > > > > > > teoricamente isso funcionaria, nao (fixme) ? > > > > > > > Não dá pra usar isso porque ao criar arquivos novos com touch, você não > > vai manter os devidos donos/grupos/permissões dos arquivos de log. > > > > A idéia de usar o loop "for" está certa, é assim que eu normamente apago > > meus logs, mas com "echo -n >", e não "rm" e "touch". > > > > Mas na verdade, perguntei sobre o find porquê quero aprender > > especificamente sobre ele. Em essência, minha pergunta é: > > > > Como usar redirecionamento no espaço entre "-exec" e "\;" de forma > > que o find continue expandindo o "{}" para o nome do arquivo que está > > sendo processado ? > > Não tem que colocar \ antes dos {}.. do tipo \{ e \} > > Não. Apesar do man falar pra colocar e tal, não é necessário. Porquê pelo menos a bash interpreta {} como dois caracteres comuns, nesse caso. Tom