Esse é um recurso do find
que permite agrupar diferentes testes juntos. Por exemplo:
find . \( -name foo -or -name bar -o -name baz \) -size +1M
Os parênteses precisam ser escapados ( \(
e \)
em vez de (
e )
) porque os parênteses são caracteres especiais para o shell (eles são usados para executar comandos em subshells ), portanto eles precisam ser ignorados para serem passados para find
e não "comidos" pela shell.
O comando acima encontrará qualquer arquivo cujo nome seja foo
, bar
ou baz
e cujo tamanho seja > 1M Agora, pegue esta estrutura de diretórios como exemplo:
$ ls -lh *
dir1:
total 2.0M
-rw-r--r-- 1 terdon terdon 1.0M Mar 7 01:24 bar
-rw-r--r-- 1 terdon terdon 1.0M Mar 7 01:24 foo
dir2:
total 4.0M
-rw-r--r-- 1 terdon terdon 2.0M Mar 7 01:24 file
-rw-r--r-- 1 terdon terdon 2.0M Mar 7 01:24 foo
Existem dois ficheiros com o nome foo
, mas apenas um tem > 1M de tamanho. Existem 2 arquivos com tamanho de > 1M, mas apenas um é denominado foo
, bar
ou baz
. Portanto, espero que o comando acima retorne apenas dir2/foo
, como de fato:
$ find . \( -name foo -or -name bar -o -name baz \) -size +1M
./dir2/foo
OK, mas e se eu executar sem os parênteses?
$ find . -name foo -or -name bar -o -name baz -size +1M
./dir2/foo
./dir1/bar
./dir1/foo
Encontram-me todos os ficheiros com o nome foo
, todos os ficheiros com o nome bar
e todos os ficheiros com o nome bar
cujo tamanho é > 1M . Portanto, os bar
e foo
em dir1
são retornados, embora seu tamanho seja < 1M
Portanto, os parênteses são muito úteis para criar um comando find
que combina diferentes conjuntos de testes. Quando combinado com os operadores -or
, -and
e -not
do find, isso é uma ferramenta extremamente poderosa.
O que eles fazem no seu exemplo eu não posso dizer, já que você não dá um comando de trabalho como exemplo. Dependerá de qual pattern
é. Se você realmente estiver usando find . -ls
e, depois disso, outro conjunto de testes entre parênteses, eles não farão nada, pois find . -ls
já corresponde e lista todos os arquivos e diretórios.