Linux en Espanol
 
[SOLUCIONADO] Obtener m?s de una info. sobre un resultado (tema #24564)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
Utsaki
Forista
Registrado: 2012-11-13
Mensajes: 4

Publicado: 2012-11-16 12:33:03    Asunto: [SOLUCIONADO] Obtener m?s de una info. sobre un resultado

Ver?is, estoy intentando obtener varios datos (en concreto, el nombre de fichero, de usuario y la fecha del ?ltimo acceso) de un mismo resultado. Hasta ahora, lo que he hecho es algo como esto:

[code:1:30ba3a9769]find . -mtime -1 | stat -c %x $(awk '{print $1}')[/code:1:30ba3a9769]

Lo que me proporciona la fecha y la hora de modificaci?n de los ficheros que han sido modificados en las ?ltimas 24 horas.

Sin embargo, a esta informaci?n le quiero adjuntar tambi?n en la misma l?nea el nombre del fichero y el usuario al que est? asociado ese fichero. He probado ya varias cosas, pero no doy con la manera de ejecutar 3 [i:30ba3a9769]stats[/i:30ba3a9769] en la misma l?nea para proporcionar en una misma vez toda la informaci?n. ?Es posible esto? ?O necesito almacenar previamente en una variable temporal el resultado del comando [i:30ba3a9769]find[/i:30ba3a9769]?

Saludos y gracias otra vez.
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2012-11-16 19:54:44    Asunto:

Hola.

?Te servir?a esto?:
script [i:fdc266ee5c]parcial.sh[/i:fdc266ee5c]
[code:1:fdc266ee5c]#!/bin/bash
IFS='
'
file $1[/code:1:fdc266ee5c]
Script [i:fdc266ee5c]principal.sh[/i:fdc266ee5c]
[code:1:fdc266ee5c]#!/bin/bash
find /datos/torrents/formateo -exec ./parcial.sh '{}' ';'[/code:1:fdc266ee5c]

Otra opci?n es hacerlo todo en el mismo script usando funciones:
[code:1:fdc266ee5c]#!/bin/bash
function parcial() {
file $1
}
IFS='
'
find /datos/torrents/formateo/ -iname "*avi" | while read file; do parcial "$file"; done [/code:1:fdc266ee5c]

En ambos casos creo que he evitado los problemas t?picos de los ficheros con espacios en los nombres gracias a IFS, pero de todos modos prueba t?.
Si tienes m?s comandos que ejecutar, simplemente donde yo he puesto la orden "file", puedes poner cuantas quieras, por ejemplo varios "stat".

Saludos.
Utsaki
Forista
Registrado: 2012-11-13
Mensajes: 4

Publicado: 2012-11-16 20:12:18    Asunto:

Hola, miguelgf.

Bueno, lo cierto es que al final me he apa?ado con un par de soluciones para lo que estaba buscando, y son:

[code:1:df44aa33a6]find . -mtime -1 | stat --printf '%n %U %y\n' $(awk '{print $1}')[/code:1:df44aa33a6]
[code:1:df44aa33a6]find . -mtime -1 -printf '%p %u %t\n'[/code:1:df44aa33a6]

En ambos casos obtengo lo que quer?a: el nombre del fichero, el del usuario y la fecha de la ?ltima modificaci?n (cambiando algunos par?metros, puedo obtener lo mismo para la fecha del ?ltimo acceso). La diferencia m?s notable que he observado es que, en el primer caso, si no encuentra al menos una coincidencia, devuelve un mensaje de error, indicando que a [i:df44aa33a6]stat[/i:df44aa33a6] le falta un operando (imagino que es porque $1 no contiene ning?n valor). Por eso, la soluci?n que he adoptado al final es la segunda, que es incluso m?s sencilla.

Lo que no comprend?a era c?mo pod?a extraer varios par?metros en una sola instrucci?n. Pensaba que ten?a que invocar varias veces al comando [i:df44aa33a6]stat[/i:df44aa33a6] o algo as?, y no sab?a c?mo hacerlo sin almacenar en una variable temporal el primer resultado del [i:df44aa33a6]find[/i:df44aa33a6]. En fin, son las cosas del novato, supongo. Ahora estaba d?ndole formato al resultado obtenido, enlaz?ndolo con un [i:df44aa33a6]awk[/i:df44aa33a6], espaciando las columnas, etc. antes de escribir por aqu? un mensaje avisando de que ya hab?a encontrado lo que buscaba.

De todas formas, muchas gracias por tu respuesta, si no me sirve para este problema en concreto, seguro que me servir? para m?s adelante, ahora que le estoy cogiendo el gustillo a la programaci?n en Bash :)

Saludos.





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries