Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Find Y Los Operadores Lógicos

Find Y Los Operadores Lógicos
Artículo
Responder citando    Descargar mensaje  
Mensaje 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 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Miercoles, 05 Diciembre 2018, 10:18 ]
 


Find Y Los Operadores Lógicos
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Find Y Los Operadores Lógicos 
 
Todo un tutorial de Find, gracias por compartir.

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Miercoles, 05 Diciembre 2018, 11:26 ]
Responder citando    Descargar mensaje  
Mensaje Re: Find Y Los Operadores Lógicos 
 
Al final con tanto rollo te quedaste sin tiempo para jugar, seguro.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Miercoles, 05 Diciembre 2018, 14:54 ]
Responder citando    Descargar mensaje  
Mensaje 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



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Miercoles, 05 Diciembre 2018, 19:16 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno