[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Restaurar Correos de un backup Maildir comprimido



Lista:

Bueno agradezco a todos por su tiempo al fin pude
solucionar el problema:

zcat bigfile50GB.tar.gz | tar -t | xargs grep -R user | awk '{print $1}' | cut -d : -f 1

No se si hay un camino mas corto o hay otra forma de hacerlo.

Muchas gracias a todos y se pide las disculpas del caso.


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).





Reply to: