• Domingo 17 de Noviembre de 2024, 17:30

Autor Tema:  Archivo Tar  (Leído 2748 veces)

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Archivo Tar
« en: Sábado 16 de Junio de 2007, 17:03 »
0
Hola amigos, bueno estoy buscando la forma de contar la cantidad de archivos que se encuentren en un archivo tar.gz.
estaba pasando el contenido a un archivo txt y luego contaba la cantidad de lineas con el wc -l pero resulta que al obtener
el contenido en el archivo con el tar tzf nombrearchivo, esto no te muestra solo los archivos sino cada directorio raiz
como titulo es decir
directorio a comprimir = directorio1
este directorio tiene 2 subdirectirios
empieza

Citar
/directorio
/directorio/archivo1.ext
/directorio/archivo2.ext
/directorio/subdirectorio1/
/directorio/subdirectorio1/archivo1.txt
/directorio/subdirectorio1/archivo2.txt

gracias de antemano
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #1 en: Sábado 16 de Junio de 2007, 18:40 »
0
Hmmm... se puede hacer en SH:
Haces un for para mirar si es archivo o direcotrio.

Se puede hacer lo mismo en otros lenguajes o hacerlo directo con Perl y sus modulos.... ahora te pongo los dos.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #2 en: Sábado 16 de Junio de 2007, 18:52 »
0
Oops, en SH no se puede puesto que no se como ver si el path es un archivo o es un directorio... la solucion sera Perl.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Archivo Tar
« Respuesta #3 en: Sábado 16 de Junio de 2007, 19:26 »
0
ah cierto su, gracias por tu sugerencia, bueno aki siguiendo tu idea se me ocurre algo asi

Código: Text
  1. cat revisaTar.txt | while read cdLee
  2. do
  3.  
  4.   if [ -f "$cdLee" ]&#59;
  5.   then
  6.     vArchivo=$(( $vArchivo + 1 ))
  7.   elif [ -d "$cdLee" ]&#59;
  8.   then
  9.     vDir=$(( $vDir + 1 ))
  10.   fi
  11.  
  12. done
  13. echo Cantidad de archivos $vArchivo
  14. echo cantidad de directorios $vDir
  15.  
  16.  

voy a probarlo para ver que tal
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #4 en: Sábado 16 de Junio de 2007, 20:01 »
0
o lo estava intentando hacer sin descomprimir  :P  ...
Arghhh! que molestia, estoy que lo hago pero tengo problemas con sacar el tamaño de archivo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Archivo Tar
« Respuesta #5 en: Sábado 16 de Junio de 2007, 20:02 »
0
Bueno asi fue que tuve que hacerlo pork las variables cuando salen del ciclo se pierden no se pork pero revisare mas para saber . lo hice con una funcion

Código: Text
  1. function Revisar {
  2.  
  3. vDir=0
  4. vArchivo=0
  5. echo revisando
  6. cat revisaTar.txt | while read cdLee
  7. do
  8.   echo /$cdLee
  9.   if [ -f "/$cdLee" ]&#59;
  10.   then
  11.     vArchivo=$(( $vArchivo + 1 ))
  12.  
  13.   elif [ -d "/$cdLee" ]&#59;
  14.   then
  15.     vDir=$(( $vDir + 1 ))
  16.   fi
  17.   contenido="Archivos:   $vArchivo
  18.          Directorios:$vDir"
  19.   echo $contenido > cantidad.txt
  20. done
  21.  
  22.  cat cantidad.txt | while read cdL
  23.  do
  24.    echo $cdL
  25.  done
  26.  
  27. }
  28.  
  29.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #6 en: Sábado 16 de Junio de 2007, 20:22 »
0
Ya lo hice por el lado feo: usando tar:

Código: Text
  1. #!/usr/bin/env perl
  2.  
  3. #Licencia: GPL
  4. #Autor: su -
  5.  
  6. use strict;
  7.  
  8. sub usage {
  9.   print "tgzlist: file.tar.gz [-f -d]\n";
  10.   print "Options:\n";
  11.   print "\t-f: Files numbers\n";
  12.   print "\t-d: Directories\n";
  13.   exit;
  14. }
  15.  
  16. usage() unless @ARGV;
  17.  
  18. if(not -f $ARGV[0]){usage();}
  19.  
  20. my ($file, $linea) = (0, 0);
  21.  
  22. my $pid = open(my $fl, "-|", "tar -tzf $ARGV[0]") or die
  23.   "Error: $!\n";
  24. while(my $linea = <$fl>){
  25.   chomp $linea;
  26.   if ($linea =~ m#(.*)/$#){
  27.     $dir += 1;
  28.   }
  29.   else {
  30.     $file += 1;
  31.   }
  32. }
  33. close $fl;
  34. print "There is $file\n"; if $ARGV[1] eq "-f";
  35. print "There is $dir\n"; if $ARGV[1] eq "-d";
  36.  
  37.  

Lo bueno es que no tenes que descomprimir el archivo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #7 en: Sábado 16 de Junio de 2007, 20:27 »
0
Algo mas:

No tienes que poner tada la lista en el archivo y hacer un cat...

con:
Código: Text
  1. for archivo in `tar -tzf archivo.tar.gz`;
  2. do
  3.     codigo...;
  4. done
  5.  
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Archivo Tar
« Respuesta #8 en: Martes 19 de Junio de 2007, 00:27 »
0
ah perfecto su, muchas gracias por tu apoyo, ahora bien tengo una duda, estoy manejando un bash que ya está hecho y tenia que agregarle algunas cosas y dentro de esas esta esta que mencioné aquí, la pregunta sería para usar este programa dentro del script tendría que hacer algo entra, o simplemente invocarlo y pasarle el parametro de lo que necesito hacer?.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #9 en: Martes 19 de Junio de 2007, 01:31 »
0
No entiendo bie que es lo que quieres.

Ten en cuenta lo siguiente:
Cuando programas en Bash es igual que usar la terminal, de hecho se puede decir que cuando estas usando la terminal estas programando en bash.

Lo que identifica a Shell script es que usa programas a parte como si fueran funciones, entonces podes usar cualquier porgrama que hayas hecho si esta dentro del path de ejecucion o si lo indicas:
Código: Text
  1. /path/de/programa --flags
  2. for Cosa in `tgzlist archivo.gz`;
  3. do
  4.   echo ${Cosa};
  5. done
  6.  
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Archivo Tar
« Respuesta #10 en: Jueves 21 de Junio de 2007, 19:50 »
0
Bueno hasta hoy fue que volvi a seguir con esto, bueno gracias su por tu comentario la verdad era algo que ignoraba.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Archivo Tar
« Respuesta #11 en: Jueves 21 de Junio de 2007, 21:29 »
0
Descuida, que es nada  ;)
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.