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: phribbr
Subject: Re: xargs com rm e logs
Date: Fri, 11 Nov 2011 15:19:07 -0000
User-agent: eGroups-EW/0.82

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]