SoloCodigo

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: arielb en Sábado 16 de Junio de 2007, 17:03

Título: Archivo Tar
Publicado por: arielb en Sábado 16 de Junio de 2007, 17:03
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
Título: Re: Archivo Tar
Publicado por: su - en Sábado 16 de Junio de 2007, 18:40
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.
Título: Re: Archivo Tar
Publicado por: su - en Sábado 16 de Junio de 2007, 18:52
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.
Título: Re: Archivo Tar
Publicado por: arielb en Sábado 16 de Junio de 2007, 19:26
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
Título: Re: Archivo Tar
Publicado por: su - en Sábado 16 de Junio de 2007, 20:01
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.
Título: Re: Archivo Tar
Publicado por: arielb en Sábado 16 de Junio de 2007, 20:02
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.  
Título: Re: Archivo Tar
Publicado por: su - en Sábado 16 de Junio de 2007, 20:22
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.
Título: Re: Archivo Tar
Publicado por: su - en Sábado 16 de Junio de 2007, 20:27
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.  
Título: Re: Archivo Tar
Publicado por: arielb en Martes 19 de Junio de 2007, 00:27
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?.
Título: Re: Archivo Tar
Publicado por: su - en Martes 19 de Junio de 2007, 01:31
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.  
Título: Re: Archivo Tar
Publicado por: arielb en Jueves 21 de Junio de 2007, 19:50
Bueno hasta hoy fue que volvi a seguir con esto, bueno gracias su por tu comentario la verdad era algo que ignoraba.
Título: Re: Archivo Tar
Publicado por: su - en Jueves 21 de Junio de 2007, 21:29
Descuida, que es nada  ;)