Find Y Los Operadores Lógicos


Objetivo: Find Y Los Operadores Lógicos
Buenas!.

Cuando estuve buscando los iconos de gambas se me ocurrió que podía hacer otras cosas con el comando Find.
Ejemplo:

- Buscar un juego del ordenador Spectrum
- Buscar un juego del ordenador Spectrum pero solo su primera parte
- Buscar un juego del ordenador Spectrum con una extensión concreta para que no se muestren otras extensiones.

- Buscar un juego del ordenador Spectrum
Quiero buscar en este caso el juego mission impossible 1.

find . -type f -iname "impossible*"


Salida:
Citar:

./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission II (1988)(US Gold).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission II (1988)(US Gold)[b].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission II (19xx)(Kixx)(Side B)[Re-Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission II (19xx)(Kixx)(Side A)[Re-Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tap/Games/I/Impossible Mission II (1988)(US Gold).tap
./Ordenadores/Spectrum/Coleccion/Tap/Games/I/Impossible Mission II (1988)(US Gold)[b].tap


Se muestra a la vez dos partes del mismo juego y extensiones distintas.
Vamos a buscar solo su primera parte, para ello usaremos el operador not, se traduce a usar las opciones/guiones -! ó -not en la línea de comando.

- Buscar un juego del ordenador Spectrum pero solo su primera parte

find . -type f -iname "impossible*" -not -iname "*II*"


Salida:
Citar:

./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/M/Mission Impossible (1983)(Silversoft).tzx
./Ordenadores/Spectrum/Coleccion/Tap/Games/M/Mission Impossible (1983)(Silversoft).tap


Como solo quiero que se muestra la extensión .tzx debo hacer algo más.
Para ello usaremos el operador and: -a ó -and

- Buscar un juego del ordenador Spectrum con una extensión concreta para que no se muestren otras extensiones.
find . -type f -iname "*impossible*" -not -iname "*II*" -and -name \*.tzx


Hemos usado la barra invertida. Podía haber usado -name "*.tzx"

Salida:
Citar:

./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx


Ahora supongamos que queremos buscar más de un juego. Haremos lo siguiente.
Necesitamos que se cumpla una expresión lógica y ademas queremos que solo se muestren los de una extensión concreta.
A la vez de usar el operador or para los distintos juegos que queremos buscar, usaremos el operador and para que se aplique
a todos esos resultados que solo quiero que se muestre la extensión .tzx
Necesitamos el operador Or. -o -or

Quiero buscar los juegos: JetPac, Green Beret y Kendo Warriors.

Al usar la expresión lógica y al ser distintos archivos usaremos los paréntesis.

- Buscar más de un juego de Spectrum y con una extensión concreta

find . -type f \( -iname "JetPac*" -o -iname "kendo w*" -o -iname "*beret*" \) -a -name \*.tzx -print 2>/dev/null


Salida:

Citar:

./Ordenadores/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back)[Re-Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/G/Green Beret (1986)(Imagine Software)[a].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/G/Green Beret (1986)(Erbe - Imagine Software)(Es).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/G/Green Beret (1986)(Hit Squad)[Re-Release].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/G/Green Beret (1986)(Imagine Software).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate)[a].tzx
./Ordenadores/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate)[a2].tzx


Ahora bien si. Y si hubiese buscado dos juegos y no hubiera usado los paréntesis en la expresión y ademas le añado el operador and a esta.

Sin el uso de paréntesis en búsqueda múltiple.

find . -type f -iname "JetPac*" -o -iname "kendo w*" -a -name \*.tzx -print 2>/dev/null


Salida:
Citar:

./Ordenadores/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back).tzx
./Ordenadores/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back)[Re-Release].tzx


Como veis no ha incluido al juego "Jet Pack". Solo ha evaluado parte de la expresión, la que esta cercana al and.

Y después de esto se me ocurrieron otras cosas. Que solo se mostrase la primera línea para que el emulador cargase el primero, que el resultado estuviese ordenado.
Lo cierto es que en bash se puede hacer las cosas de distintas formas. De la manera más fácil o la más complicada.

Podía haber usado expresiones regulares, pero ahora estoy algo oxidado con ellas.
En Find tenemos la opción/guión -regex

Ah, el uso de los juegos de Spectrum venía bien, ya que son muchos archivos.

Saludos

última edición por Shell el Miercoles, 05 Diciembre 2018, 10:29; editado 2 veces
Objetivo: Re: Find Y Los Operadores Lógicos
Todo un tutorial de Find, gracias por compartir.

Saludos.

Perfil MP  
Objetivo: Re: Find Y Los Operadores Lógicos
Al final con tanto rollo te quedaste sin tiempo para jugar, seguro.

Perfil MP  
Objetivo: Re: Find Y Los Operadores Lógicos
Tincho:

Estamos para eso.

Shordi:

Citar:

Al final con tanto rollo te quedaste sin tiempo para jugar, seguro.




Nunca había visto una búsqueda múltiple con Find y el uso de los operadores lógicos con esta.

Ahora estoy intentando hacerlo de otra forma con Find que acorta bastante la línea de comando, pero ya
no usa operadores lógicos. Me encontré el primer tropiezo y estoy intentando ver como se resuelve.

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4064s (PHP: -72% SQL: 172%)
Consultas SQL: 44 - Debug off - GZIP Activado