Combinando Múltiplos Critérios de Busca
O comando find torna-se ainda mais poderoso quando você combina múltiplos critérios de pesquisa. Você pode usar operadores lógicos para criar padrões de pesquisa complexos.
Usando a Lógica AND
Por padrão, quando você especifica múltiplos critérios, o find usa a lógica AND, o que significa que todas as condições devem ser verdadeiras. Por exemplo, para encontrar todos os arquivos de texto maiores que 100 bytes:
find ~/project/files -type f -name "*.txt" -size +100c
Este comando encontra arquivos que são arquivos de texto E maiores que 100 bytes.
Usando a Lógica OR com -o
Para usar a lógica OR, você pode usar a opção -o. Por exemplo, para encontrar arquivos que são arquivos de texto OU arquivos PDF:
find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)
Observe o uso de parênteses, que devem ser escapados com barras invertidas. Este comando encontra arquivos que correspondem a qualquer uma das condições.
A saída deve incluir:
/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf
Usando a Lógica NOT com
Para negar uma condição, use o operador !. Por exemplo, para encontrar todos os arquivos que não são arquivos de texto:
find ~/project/files -type f ! -name "*.txt"
Este comando encontra todos os arquivos que NÃO têm a extensão .txt.
Exemplos Complexos
Vamos tentar algumas combinações mais complexas. Por exemplo, para encontrar todos os arquivos que são:
- Imagens JPG ou PNG E
- Maiores que 0 bytes
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c
Para encontrar todos os arquivos no diretório documents que não são arquivos PDF:
find ~/project/files/documents -type f ! -name "*.pdf"
Vamos criar alguns arquivos adicionais para demonstrar uma pesquisa mais complexa:
## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done
touch ~/project/files/images/empty_image.png
Agora, vamos encontrar todos os arquivos de imagem (JPG ou PNG) que são vazios OU maiores que 1KB:
find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)
Este comando complexo demonstra como você pode criar critérios de pesquisa sofisticados combinando múltiplas condições com operadores lógicos.