Ayuda con Script de Linux

Nucklear

Hola,

Estoy haciendo un pequeño script para linux que me recopile una serie de datos y me los muestre por pantalla. Se trata de unos archivos que contienen unos ID's que están en rutas distintas pero parten de un mismo patrón.

Por ejemplo, si el path común es /opt/programa/instalacion/ , las rutas donde se encuentran los archivos serían /opt/programa/instalacion/ruta1/componente1 o /opt/programa/instalacion/ruta2/componente2.

El problema que tengo es el buscar la manera mas efectiva de moverme entre los directorios sin hacer una chapuza. Se que es algo básico pero estoy completamente bloqueado y no me sale nada.

A ver si me podeis ayudar, tengo algunas ideas, pero no termino de verlas correctas.

elkaoD

Ehm... ¿cómo? ¿Dónde te has bloqueado exactamente?

¿Forma de moverte entre directorios? No entiendo nada.

1 respuesta
Nucklear

#2 No, el tema es como moverme entre 10 directorios leyendo un archivo de texto en cada una de la forma mas rápida.

elkaoD

Pero a ver, explícate mejor, ¿lo que quieres es recorrer todos los directorios en busca de archivos? ¿Hay un archivo por cada directorio? ¿Los archivos tienen una nomenclatura común o son nombres random? etc. etc. Da detalles macho.

Depende del caso, ls o find son tus amigos.

1 respuesta
Nucklear

#4 Necesito recorrer todos los directorios en busca de unos archivos con extensión .pid que contienen un numero de proceso solamente.

Por ejemplo:

/opt/ruta1/ejemplo1/numero1.pid
/opt/ruta2/ejemplo2/numero2.pid
...
/opt/rutaX/ejemploX/numeroX.pid

NumeroX.pid contiene un numero que tras recolectarlos todos quiero mstrarlos por pantalla del siguiente modo:

NumeroX: XXXXX
ETC

No se si se entiende, es que desde el movil es complicado explayarme mucho...
Gracias

1 respuesta
elkaoD

#5 entonces, find es tu amigo (asumo que los nombres no los conoces de antemano), Googlea, hay cientos de ejemplos.

De hecho con el propio find puedes aplicar un comando a cada archivo encontrado y hacer ahí ya el echo del NumeorX y el cat del archivo.

1 respuesta
Nucklear

#6 Vale es lo que necesito, thanks.

No quieras saber lo que pensaba hacer...

1 respuesta
elkaoD

#7 por curiosidad, qué tenías planteado? xD

1 respuesta
Nucklear

#8 pues :

cd /path1
cat *.pid
cd /path2
cat *.pid
...
cd /pathX
cat *.pid

Ahora en 2 lineas ya me da lo que quiero, solo tengo que formatearlo un poco y listo.

1 respuesta
elkaoD

#9 joder macho es que ni un for siquiera xD

Para la próxima asume que en Linux el 99% de las cosas que pretendas hacer en scripting se hacen usando programas y redirigiendo entradas y salidas.

Familiarízate con cat, grep, awk, sed, find y otras mini-herramientas útiles y sobre todo con el uso de pipes (|) y salidas (<>)

1 respuesta
Nucklear

#10 Si todos los comandos los uso habitualmente, pero hoy no se me ocurria como usarlos para esto en concreto xD

Ulmo
 For i in `ls path/*/*.pid`; do echo $i; cat $i; done 

Fácil y para toda la familia.

1 respuesta
Gnos1s

#12 Es mejor usar find.

Es más extensible, permite añadir más opciones en un futuro y aprendiéndolo a manejar solucionas casi el 100% de problemas con archivos y directorios.

Usuarios habituales

  • Gnos1s
  • Ulmo
  • Nucklear
  • elkaoD