Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Find Y Los Operadores Lógicos
Autor Mensaje
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Miercoles, 05 Diciembre 2018, 10:29; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Find Y Los Operadores Lógicos 
 
Al final con tanto rollo te quedaste sin tiempo para jugar, seguro.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

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


 
Lista de permisos
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



  

 

cron