Combinando múltiples criterios de búsqueda
El comando find se vuelve aún más poderoso cuando se combinan múltiples criterios de búsqueda. Puedes utilizar operadores lógicos para crear patrones de búsqueda complejos.
Usando lógica AND
Por defecto, cuando se especifican múltiples criterios, find utiliza la lógica AND, lo que significa que todas las condiciones deben ser verdaderas. Por ejemplo, para encontrar todos los archivos de texto de más de 100 bytes:
find ~/project/files -type f -name "*.txt" -size +100c
Este comando encuentra archivos que son a la vez archivos de texto Y de más de 100 bytes.
Usando lógica OR con -o
Para utilizar la lógica OR, se puede usar la opción -o. Por ejemplo, para encontrar archivos que son ya sea archivos de texto O archivos PDF:
find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)
Nótese el uso de paréntesis, que deben ser escapados con barras invertidas. Este comando encuentra archivos que cumplen cualquiera de las condiciones.
La salida debería 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 lógica NOT con
Para negar una condición, se utiliza el operador !. Por ejemplo, para encontrar todos los archivos que no son archivos de texto:
find ~/project/files -type f ! -name "*.txt"
Este comando encuentra todos los archivos que NO tienen la extensión .txt.
Ejemplos complejos
Intentemos algunas combinaciones más complejas. Por ejemplo, para encontrar todos los archivos que son:
- Ya sea imágenes JPG o PNG Y
- De más de 0 bytes
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c
Para encontrar todos los archivos en el directorio de documentos que no son archivos PDF:
find ~/project/files/documents -type f ! -name "*.pdf"
Creemos algunos archivos adicionales para demostrar una búsqueda más compleja:
## 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
Ahora, encontremos todas las imágenes (JPG o PNG) que están vacías O son de más de 1KB:
find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)
Este comando complejo demuestra cómo se pueden crear criterios de búsqueda sofisticados combinando múltiples condiciones con operadores lógicos.