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

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

Re: [shell-script] concatenar arquivos


From: Gustavo Chaves
Subject: Re: [shell-script] concatenar arquivos
Date: 23 Apr 2005 19:09:19 -0300
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4

>>>>> On Fri, 22 Apr 2005 22:29:57 -0300 (BRST), Felipe Kellermann 
>>>>> <address@hidden> said:

  > Eu gostaria de entender o motivo de as pessoas gostarem tanto de fazer as 
  > misturas de find com grep e xargs e etc. Esse combo não deveria existir há 
  > um bom tempo, ou deveria ser um pouco menos utilizado :-)

Considerando apenas o poder dos globs tradicionais (*, ? e []), creio
que estes sejam alguns bons motivos:

- O find não serve apenas para buscar arquivos por nome, mas também
  por vários outros atributos, como tamanho, idade, dono, grupo e
  qualquer outra meta-informação que você possa obter do inode do
  arquivo.

- O find procura arquivos recursivamente em uma árvore de diretórios
  sem que se precise especificar sua profundidade.

- O find permite que você imponha limites na recursão da busca em
  função da profundidade da árvore (-maxdepth) e de qualquer atributo
  encontrado num diretório (-prune).

- O find permite que você especifique filtros para os nomes dos
  arquivos usando globs (na opção -name), mas, como globs são menos
  poderosos que expressões regulares em geral, algumas vezes é
  conveniente acoplar um grep à saída do find para melhor especificar
  o filtro.

- Como eu já mencionaei algumas mensagens atrás, se o resultado da
  expansão de um glob for muito grande, corre-se o risco de esbarrar
  no limite de tamanho de linha suportado por uma shell ou do tamanho
  dos argumentos de um processo que pode ser criado pelo kernel.  Por
  isso o xargs...

  > Qualquer shell relativamente nova faz um bom uso de globs. Não há nada que 
  > seja feito com find (mais grep, xargs, etc) que não possa ser feito só com 
  > um glob.

Globs tradicionais são muito pobres pra competir.  Algumas shells
implementam algumas extensões que os tornam mais poderosos, como os
operadores *(), +(), ?(), @() e !().  (Na bash é preciso definir a
variável "extglob" pra que as extensões sejam processadas como tal.)
Mas mesmo assim, o resultado não é tão poderoso quanto uma expressão
regular de um egrep ou de um sed.  (Na pdksh, por exemplo, um '/'
não funciona dentro de um '[]', de modo que não dá pra simular a busca
recursiva.)

Mas eu acho que, mesmo que alguma shell implemente estas e outras
extensões de modo que tenhamos o poder geral de uma expressão regular,
é preciso pensar duas vezes antes de usá-las se você estiver
preocupado com portabilidade.

Gustavo.




reply via email to

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