* nix find -tipo flag: pode aceitar vários tipos?

7

Eu quero usar find para obter todos os simlinks e arquivos regulares. Eu posso usar o -type para estes individualmente, e eu posso usar -o para string-los juntos, mas aparentemente eu não posso fazer -type fl .

Existe uma maneira de condensar esse comando? É muito pesado.

find -type l -name node-dev -exec ls -lah {} + -o -type f -name node-dev -exec ls -lah {} +

Gostaria de poder executá-lo sem o -o , como:

find -type lf -name node-dev -exec ls -lah {} +

A página man parece indicar que isso não é possível (não diz nada sobre argumentos% flag -type extras), mas eu pensei em perguntar de qualquer maneira e tentar aprender alguma coisa.

Observe que os arquivos não têm garantia de nenhum tipo de estrutura de nomenclatura de extensão razoável, portanto, qualquer solução baseada em regex provavelmente não funcionará. Além disso, eu poderia usar o operador '!' para excluir diretórios como essa resposta sugere , mas eu gostaria de excluir mais do que apenas diretórios da pesquisa.

    
por Patrick M 15.01.2014 / 03:05

1 resposta

9
# Apply to only link or file type directory entries: 
$ find . \( -type l -o -type f \) -name node-dev -exec ls -lah {} \;

# Apply to anything but a directory - add more with -o in between "\(" & "\)" meta-characters:
$ find . ! \( -type d \) -name node-dev -exec ls -lah {} \;

Note que no comando find, há um switch -ls que pode substituir a chamada -exec, lembrando que o find pode ser lento para começar, mas ter que criar um novo processo para cada arquivo encontrado usa o sistema recursos melhor utilizados em outros lugares.

    
por 15.01.2014 / 04:09