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

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

Re: xargs com rm e logs


From: luizcoura
Subject: Re: xargs com rm e logs
Date: Fri, 11 Nov 2011 15:37:49 -0000
User-agent: eGroups-EW/0.82

E a opção -delete?

$ find /stuff -type -f -mtime +15 -fls /tmp/cleanup.log -delete

Mais seguro e tão rápido quanto o exec ... +

Vejam:

http://www.gnu.org/software/findutils/manual/html_node/find_html/Deleting-Files.html

(Acabei de entrar na lista shell-script e publicar essa mensagem, entretanto, 
enviei essa mensagem um pouco antes, sem pertencer a lista. Portanto, ignorem a 
duplicidade caso o responsável pela lista publique a mensagem)

;)
Luiz

--- Em address@hidden, "phribbr" <pribeiro@...> escreveu
>
> Valeu Julio,
> 
>    Fiz 3 testes na area na area /lib(varios arquivos).
> 
> 
> 1) Com o ";" do find. Normal com espacos nos nomes.
> $ time find /lib -type f -exec ls -l {} \;
> real  0m21.015s
> user  0m2.986s
> sys   0m10.792s
> 
> 2) Com o "+" do find. Normal com espacos nos nomes.
> $ time find /lib -type f -exec ls -l {} \+
> real  0m1.472s
> user  0m0.161s
> sys   0m0.129s
> 
> 3) Com o xargs. Necessario o "print0" e "-0" para espacos no nome.
> $ time find /lib -type f -print0 | xargs -0 ls -l
> real  0m1.465s
> user  0m0.174s
> sys   0m0.140s
> 
> Resultados:
> - Mesmo desempenho. xargs e "+" do find
> - pior desempenho ";" do find.
> 
> Entao podemos dizer que o "+" eh o xargs????
> 
> Se for isso o "find eh o comando!!!".
> 
> Grande descoberta!!!!
> 
> Valeu!
> Paulo Henrique
> 
> 
> --- Em address@hidden, "Julio C. Neves" <julio.neves@> escreveu
> >
> > Fala PH,
> > realmente vc entendeu o conceito. A opção -I pattern (ou simplesmente -i
> > (que esta deprecated)) processa arquivo a arquivo, como se fosse um for. É
> > boa para esnobar programadores de outras linguagens por sua facilidade de
> > gerar one-liners, como fiz.
> > 
> > Essa construção é 'um pouco' mais lenta que a do -fls, mas te permite
> > tratar arquivos com quaisquer nomes, o que com -fls não é verdade e está
> > até escrito no man (vi hoje).
> > 
> > Mas já que vc está colecionando dicas no seu caderninho e precisa de
> > velocidade. Vou te dar a maior de todas: qdo estiver usando a opção -exec,
> > evite usar \; no final e prefira usar \+. Vc verá que é muuuuuuito mais
> > rápido.
> > 
> > Supondo que vc quer remover alguns arquivos e o find achou arq1, arq2 e
> > arq3, a linha para ser executada, gerada pelo exec será:
> > 
> >   » Usando \;
> > rm arq1 ; rm arq2 ; rm arq3
> > 
> >   » Usando \+
> > rm arq1 arq2 arq3
> > 
> > Abcs,
> > Julio
> > *Quer aprender tudo de Shell em 2 fins de semana?*
> > *  julio.neves@ <julio.neves@> ou  (21) 8112-9988*
> > **
> > *** » **julioneves1      » juliobash*
> > 
> > 
> > 
> > Em 11 de novembro de 2011 09:05, phribbr <pribeiro@> escreveu:
> > 
> > > **
> > >
> > >
> > > Ola Julio, bom dia!
> > >
> > > Esta opcao tambem funciona perfeitamente!
> > >
> > > Demoro um pouco, mas entendi!!
> > >
> > > Fiz alguns teste e vi que na verdade o "{}" eh como
> > > uma variavel, entao posso usar um nome como VARLS ao inves de {}.
> > >
> > > $ find /data -mtime +5 -type f | xargs -I "VARLS" bash -c "du -sh
> > > 'VARLS';ls -l 'VARLS'" > $LOGS/removidos
> > >
> > > Observei tambem que ele perde em desempenho para o "-fls", porque ele
> > > faz a leitura de arquivo por arquivo.
> > >
> > > Para entender isso, fiz um teste para renomear arquivos e funcionou
> > > corretamente. Adicionei as extensoes .txt em todos os arquivos.
> > >
> > > $ find /home/ph/TESTS/txt -type f | xargs -I "VARLS" bash -c "ls -l
> > > 'VARLS';mv 'VARLS' 'VARLS'.txt; ls -l 'VARLS'.txt"
> > >
> > > Ele mostrara o nome antigo e o novo em seguida. Na verdade foi um
> > > 'for' com o xargs. Certo???
> > >
> > > Mais uma dica pro meu caderno!!!
> > > Obrigado!
> > > Paulo Henrique
> > >
> > > --- Em address@hidden, "Julio C. Neves" <julio.neves@>
> > > escreveu
> > > >
> > > > Fala Paulo Henrique,
> > > > a opção -fls algumas vezes esbarra em alguns problemas (como nomes de
> > > > arquivos com espaços em branco, p.ex.). Uma outra forma de fazer isso é
> > > > usando a opção -I do xargs. Algo assim:
> > > >
> > > > $ find /data -mtime +5 -type f | xargs -I{} bash -c "rm -fv '{}'; ls -l
> > > > '{}'" > $LOGS/removidos
> > > >
> > > > Neste caso, a opção -I do xargs joga para o token definido ({}) os dados
> > > > recebidos pela entrada padrão (|). Como o xargs atua sobre uma instrução
> > > > somente, usei o bash -c, pois por intermédio dele consigo executar o rm
> > > e o
> > > > ls -l.
> > > >
> > > > Repare que as chaves estão entre apóstrofes e, assim sendo, espaços em
> > > > nomes de arquivos estão devidamente protegidos da interpretação do 
> > > > shell.
> > > >
> > > > Bom isso, né? ;)
> > > >
> > > > Abcs,
> > > > Julio
> > > > *Quer aprender tudo de Shell em 2 fins de semana?*
> > > > * julio.neves@ <julio.neves@> ou (21) 8112-9988*
> > > > **
> > > > *** » **julioneves1 » juliobash*
> > > >
> > > >
> > > >
> > > > Em 10 de novembro de 2011 15:23, phribbr <pribeiro@> escreveu:
> > > >
> > > > > **
> > > > >
> > > > >
> > > > > Valeu, funcionou!!!
> > > > >
> > > > > # find /data -atime +5 -type f -fls /logs/removidos.txt -print0 |
> > > xargs -0
> > > > > rm -v
> > > > >
> > > > > Pior que li o man, mas nao cheguei nesta ideia.
> > > > > Valeu mesmo!!!
> > > > >
> > > > > Obrigado!
> > > > > Paulo Henrique
> > > > >
> > > > > --- Em address@hidden, MrBiTs <mrbits.dcf@> escreveu
> > > > >
> > > > > >
> > > > > > -----BEGIN PGP SIGNED MESSAGE-----
> > > > > > Hash: SHA256
> > > > > >
> > > > > > On 11/10/2011 01:45 PM, phribbr wrote:
> > > > > > > Boa tarde, Alexandre!!!
> > > > > > >
> > > > > > > Na verdade era os arquivos com tempo de acesso mesmo, expliquei
> > > > > errado, me desculpe!
> > > > > > >
> > > > > > > Com o xargs tem a opcao para remover os dados com espacos sim,
> > > basta
> > > > > utilizar o -print0 para o find e o "-0" para o xargs.
> > > > > > > #find /data - atime +5 -type f -print0 | xargs -0 rm
> > > > > > >
> > > > > > > O problema mesmo eh o log detalhado dos arquivos que serao
> > > removidos.
> > > > > Tudo isso em apenas uma execucao apenas do find.
> > > > > >
> > > > > > Sempre falta uma leitura básica da manpage do comando. não é não ?
> > > > > >
> > > > > > O find tem um parâmetro -ls, que faz exatamente o que você quer e
> > > pode
> > > > > ser utilizado junto ao -exec. Se você ainda quiser escrever
> > > > > > o resultado num arquivo, manda um -fls no lugar do ls.
> > > > > >
> > > > > >
> > > > > > - --
> > > > > >
> > > > > > LLAP
> > > > > >
> > > > > > .0. MrBiTs - mrbits.dcf@
> > > > >
> > > > > > ..0 GnuPG -
> > > > >
> > > http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> > > > > > 000 http://www.mrbits.com.br
> > > > > >
> > > > > >
> > > > > > -----BEGIN PGP SIGNATURE-----
> > > > > > Version: GnuPG v1.4.11 (GNU/Linux)
> > > > > >
> > > > > > iQEcBAEBCAAGBQJOu/toAAoJEG7IGPwrPKWrDXoIAJaMBEnaEdutMUXJieUKKU5f
> > > > > > WrLnCAIkQ7T0X0donLklTFY2PUUxEJqMn52i5LmD0an7Cv0Kj0x3+9o19UGvxHpD
> > > > > > jfhtHMrs4lFF9tgTcNKIzUNx/gwRaogN7yOWI97wc+2ol5ui53++Z5bBSrbuK1ZF
> > > > > > WT7TxMBwj5N5HS6SXDLsaO1HBQoiW92sTGHZyaQ3q6vvotOzHjqqNgMEiyWOUpd1
> > > > > > 5Xpu5sJolSCgvZrgByHxw1zyf6RnWFmsib2wQ8FOCtrdbKHjVAbyX86e1YCqCo0U
> > > > > > 9LJERaEkMt6MBL4+tq1gIINPfN5weJkZLVxKsPsZxwyCQpH0raKh4XjWG1uIbk4=
> > > > > > =KrNB
> > > > > > -----END PGP SIGNATURE-----
> > > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > >
> > >  
> > >
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>




reply via email to

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