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: 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


reply via email to

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