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

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

Re: [shell-script] Re: xargs com rm e logs


From: Julio C. Neves
Subject: Re: [shell-script] Re: xargs com rm e logs
Date: Fri, 11 Nov 2011 10:43:12 -0200

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?*
*  address@hidden <address@hidden> ou  (21) 8112-9988*
**
*** » **julioneves1      » juliobash*



Em 11 de novembro de 2011 09:05, phribbr <address@hidden> 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]