On Mon, Mar 26, 2007 at 08:46:34AM -0500, Renzo Portocarrero wrote: > Rodrigo Gallardo: > > > > [ respuesta a un problema al tratar de despemacar un .tar] [Nota: *NO* hagas top-posting. Si lo haces de nuevo no volveré a contestar a ningún mensaje] > En ese Maildir deposito todos los correos entrantes de TODOS > los usuarios. > [ ... ] > # zcat backup.tar.gz | grep -a user_3 > > Me devuelve las filas del archivo que contienen > for <user_3@domain..tlc> from:<user@yahoo.com> > Mas no el nombre del archivo que es lo que se quiere. Sí, por que al hacer eso estás pasando por grep todo *el contenido* del tar, sin separarlo en archivos. > > # zcat backup.tar.gz | tar -t > > Devuelve toda la lista de archivos es decir: > 11118888.3454737.domain.tlc > 11345345.3734545.domain.tlc > 13453458.3734435.domain.tlc Exacto. tar -t regresa *la lista de nombres.* Esa es su función. > Lo que deseo es lo siguiente > > # zcat backup.tar.gz | tar -t | grep -a user_3 > y me devuelva: > 11345345.3734545.domain.tlc > > Para extraer solo ese archivo. > Pero al parecer grep no busca dentro de los archivos. No, por que tar no los está extrayendo. Lo digo de nuevo: tar sólo está extrayendo la lista de nombres. grep *no puede* buscar dentro del .tar, por que grep no conoce la estructura interna de un .tar. Cuando dices <comando> | grep grep busca entre los datos que <comando> imprime en la pantalla si lo ejecutas sólo. Entonces, ya aterrizando al problema específico: 1. Si los nombres de archivo guardados no tienen información acerca del destinatario, no hay forma que un tar -t | <lo que sea> los filtre por destinatario. Luego, lo único que puedes hacer es extraer todo, eliminar lo que sobra. ¡Pero no tengo espacio en mi disco!, me dices. Ah, pues entonces consiguete alguien que sepa usar bien el shell para que rellene los detalles de un script que itere sobre la lista de nombres, extraiga un mensaje a la vez, vea si debe guardarse y lo elimine si no. Algo parecido a: tar -t | while read filename; do tar -x $filename; grep <usuario> $ filename || rm $filename done 2. Para evitarte dolores de cabeza futuros, cambia la forma de generar el .tar, dejando que los archivos tengan en su nombre información acerca del destinatario del mensaje (separalos por directorios, incluye el nombre de usuario en el nombre de arcivo, que sé yo).
Attachment:
signature.asc
Description: Digital signature