Como procurar com o GNU encontrar vários tipos de arquivos por vez?

4

Como é possível usar o comando GNU find para combinar vários tipos de arquivos por vez (um comando de busca)?

A página man diz:

-type c
    File is of type c:
    b      block (buffered) special
    c      character (unbuffered) special
    d      directory
    p      named pipe (FIFO)
    f      regular file
    l      symbolic link; this is never true if the -L option or the -follow
           option  is in  effect,  unless  the  symbolic link is broken.  If
           you want to search for symbolic links when -L is in effect, use
           -xtype.
    s      socket
    D      door (Solaris)

e eu quero procurar por arquivos ( f ) e links simbólicos ( l ) e canalizá-lo para outro processo. Como posso pesquisar os dois ao mesmo tempo?

Eu tentei

find -type fl | …
find -type f -type l | …
find -xtype f -type l | …

Eu sei que uma solução alternativa seria usar um subshell

(find -type f; find -type l) | …

mas eu só quero saber se for possível.

    
por erik 17.08.2015 / 20:47

3 respostas

7

Você pode agrupar e usar operadores lógicos com find, mas você precisa escapar dos parens para procurar todos os arquivos e links como

find \( -type f -o -type l \) <other filters>

então se você quiser todos os arquivos e links cujo nome comece com t você poderia fazer

find \( -type f -o -type l \) -name 't*'

Você só precisa dos parênteses se quiser agrupar as coisas e combinar com outros opelentes, portanto, se você não tiver outros critérios de pesquisa, poderá omiti-los

    
por 17.08.2015 / 20:51
1

Tente isto:

find -type f -o -type l
    
por 17.08.2015 / 20:51
0

Você pode combinar os predicados usando -a (para and ) ou -o (para or ). Então, você pode digitar

find /path -type f -o -type l
    
por 17.08.2015 / 20:51

Tags