De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Gustavo Chaves
Data de Publicação: 15 de Setembro de 1998
O Gustavo mandou uma colaboração indicando uma maneira melhor de realizar um comando sobre múltiplos arquivos. A seguir a íntegra da mensagem:
Queiroz> #!/bin/sh Queiroz> for file in ""find . -name \*.txt -print"" do Queiroz> mv $file ""dirname $file""/""basename $file .txt"".doc Queiroz> done Olá Queiroz. Há algum tempo eu lhe mandei uma ``meta-dica'' a respeito do livro `UNIX Power Tools', da O'Reilly. Uma das dicas mais legais que eu aprendi com ele foi uma maneira de otimizar este loop. Vamos simplificar e imaginar que você esteja no diretório contendo arquivos com extensão "".C' e que você queira trocá-las por"".cc'. Antes de ler o livro eu fazia o seguinte: for i in *.C do mv $i ""basename $i .C"".cc done Note que pra cada arquivo são invocados dois processos: o basename e o mv. A dica do livro mostra como fazer isto invocando apenas três processos e mais um pra cada arquivo. Veja: ls *.C | sed 's/\(.*\).C$/mv \1.C \1.cc/' | sh O ls gera a lista dos arquivos a serem renomeados, um por linha, e os passa ao sed que produz, para cada arquivo, um comando mv apropriado. Estes comandos mv são passados para uma instância da shell que os executa em seqüência, sem loop. Se a lista tiver mais que três arquivos você já estará economizando ativações de processos. O que eu achei genial foi usar o sed pra construir um script on-the-fly e passá-lo para uma outra instância da shell. É fácil aplicar este truque em outras situações. O difícil (pelo menos para mim) seria tê-lo descoberto sozinho.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários