[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] concatenar arquivos
From: |
Felipe Kellermann |
Subject: |
Re: [shell-script] concatenar arquivos |
Date: |
Sun, 24 Apr 2005 00:06:16 -0300 (BRST) |
User-agent: |
Pine <http://www.washington.edu/pine/> |
On Sat, 23 Apr 2005 7:09pm -0300, Gustavo Chaves wrote:
> > 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:
Assim como 99% das features que são geralmente usadas em um `find' não são
funcionalidades "tradicionais", eu não estava, obviamente, considerando um
tipo de glob "tradicional" :-) Mesmo assim... Vou tentar responder apenas
aos teus comentários, sem comentários pessoais meus.
> - 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.
Buscar arquivos por nome (árvore):
% print **/nome
Tamanho (maiores que 1K):
% print *(Lk+1)
Tempos/idade (change time (pode ser `c', `m' e `a') de 59 segundos):
% print *(cs+59)
Dono e grupo (usuário ou grupo 1234):
% print usuário *(u1234) e grupo *(g1234)
Dono/grupo (usuário ou grupo `fuubar'):
% print usuário *(u:fuubar:) e grupo *(g:fuubar:)
E qualquer outra informação (de fato, bem mais informações que aquelas que
eu consigo usar nas implementações do `find' que eu conheço).
> - O find procura arquivos recursivamente em uma árvore de diretórios
> sem que se precise especificar sua profundidade.
A bash não tem isso por motivos políticos. Pessoas que querem que isso
seja feito são inúmeras (os patches para fazer isso também).
Usa zsh, "**" faz uma busca recursiva (é só uma das formas).
> - 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).
Quando se tem um depth, o mais prático é especificar ele na "recursão"
explicitamente. O `prune' é feito com o qualificador(?) `^'. Também é
possível especificar um range na seleção do resultado (resultado fica
guardado num array).
> - 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.
Por que as pessoas não usariam `-(i)regex'?
Seria só especificar que é um GNU grep e estaria OK, não acha?
> - 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...
As shells mais novas (zsh) dispensam o xargs e têm mecanismo interno que
faz a mesma coisa (o zargs, no caso do exemplo).
> 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.)
Essas são as "globs ksh" que eu falei...
> 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.)
Sobre ser "menos poderoso" ou não, depende do usuário.
Sobre a "limitação" do `/' no `[]', eu lamento em avisar que é muito pior
do que isso :-) Não funciona (e nem deve funcionar) com nenhum shell e em
nenhum tipo de glob. Não significa que recursão não seja possível.
> 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.
Tu tem razão, e eu concordo contigo.
Mas dá uma olhada nas funcionalidades "portáveis" do find... :-)
--
Felipe Kellermann
- Re: [shell-script] concatenar arquivos, (continued)
- Re: [shell-script] concatenar arquivos, Gustavo Chaves, 2005/04/21
- Re: [shell-script] concatenar arquivos, Felipe Kellermann, 2005/04/21
- Re: [shell-script] concatenar arquivos, Gustavo Chaves, 2005/04/22
- Re: [shell-script] concatenar arquivos, Emerson Domingues Souto, 2005/04/22
- Re: [shell-script] concatenar arquivos, Gustavo Chaves, 2005/04/22
- Re: [shell-script] concatenar arquivos, Emerson Domingues Souto, 2005/04/22
- Re: [shell-script] concatenar arquivos, Gustavo Chaves, 2005/04/22
- Re: [shell-script] concatenar arquivos, Emerson Domingues Souto, 2005/04/22
- Re: [shell-script] concatenar arquivos, Felipe Kellermann, 2005/04/22
- Re: [shell-script] concatenar arquivos, Gustavo Chaves, 2005/04/23
- Re: [shell-script] concatenar arquivos,
Felipe Kellermann <=
- Re: [shell-script] concatenar arquivos, Felipe Kellermann, 2005/04/22