elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Bash] Problema con array [resuelto]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Bash] Problema con array [resuelto]  (Leído 8,358 veces)
hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
[Bash] Problema con array [resuelto]
« en: 8 Julio 2011, 14:31 pm »

Hola. Quiero hacer un script que compare los ficheros de dos directorios. Para ello primero almaceno en dos arrays los ficheros de estos pero el problema está en que si el nombre de algún fichero tiene un espacio me lo guarda en dos posiciones del array. Dejo algo de código y gracias.
Código
  1. #!/bin/bash
  2.  
  3. if test -d "$1"
  4. then
  5.  
  6.  if test -d "$2"
  7.  then
  8.  
  9.     dir1=(`cd $1; file * | grep -v "directory" | cut -f 1 -d ":"`)
  10.     dir2=(`cd $2; file * | grep -v "directory" | cut -f 1 -d ":"`)
  11.  
  12.     for i in ${dir2[@]}
  13.     do
  14.       echo -e "$i\n"       #Aquí se observa lo dicho
  15.     done    
  16.  fi
  17. fi
  18.  


« Última modificación: 23 Julio 2011, 11:09 am por hervasiop12345 » En línea

hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Bash] Problema con array
« Respuesta #1 en: 10 Julio 2011, 23:25 pm »

nadie?


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Bash] Problema con array
« Respuesta #2 en: 11 Julio 2011, 00:32 am »

Código
  1. #!/bin/bash
  2. declare -a carpetas=()
  3. find . -maxdepth 1 -type d | grep -v "^\.$" > dirs
  4. while read elemento
  5. do
  6. carpetas=("${carpetas[@]}" "$elemento");
  7. done < ./dirs
  8. echo -e "Elementos del arreglo : "
  9. for i in `seq 0 1 $[ ${#carpetas[@]} - 1 ]`
  10. do
  11. echo -e "${carpetas[$i]}"
  12. done
  13.  
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Bash] Problema con array
« Respuesta #3 en: 11 Julio 2011, 18:32 pm »

Muchas gracias por tu ayuda. Gracias a eso he avanzado pero me he visto de nuevo atascado ya que al comparar nombres de ficheros siendo alguno con espacio no lo hace bien. Debería de avanzar un array y avanza otro .Dejo el código con el que intentaba calcular la intersección de los directorios para que veas mejor a lo que me refiero:
Código:
#!/bin/bash

declare -a carpetas=()
declare -a carpetas2=()
i=0
j=0


if test -d "$1"
then

  if test -d "$2"
  then
  
     cd $1; find -maxdepth 1 ! \( -type d \)| cut -c 3- |sort > dirs
     while read elemento
     do

carpetas=("${carpetas[@]}" "$elemento")

     done < ./dirs
     cd $2; find -maxdepth 1 ! \( -type d \)| cut -c 3- |grep -v "dirs" |sort> dirs    
     while read elemento
     do

       carpetas2=("${carpetas2[@]}" "$elemento")

     done < ./dirs    
    
     tamanyo1=${#carpetas[@]}
     tamanyo2=${#carpetas2[@]}
            
    while true
    do
      fich="${carpetas[$i]}"
      fich2="${carpetas2[$j]}"
      echo $fich
      echo $fich2

      if [ "$fich" == "$fich2" ]
      then

        echo "El fichero "${carpetas[$i]}" es común a ambos directorios"
        let i=i+1
        let j=j+1

      elif [ "$fich" > "$fich2" ]
      then

        let j=j+1

      elif [ "$fich" < "$fich2" ]
      then

        let i=i+1
      fi

      if [ $i -eq $tamanyo1 ] || [ $j -eq $tamanyo2 ]
      then
        break
      fi
    done      
  fi
fi

En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Bash] Problema con array
« Respuesta #4 en: 11 Julio 2011, 19:19 pm »

¿Qué tiene que hacer el script?
¿Cuál es la idea general?
¿Dónde crees que está el fallo?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Bash] Problema con array
« Respuesta #5 en: 11 Julio 2011, 22:52 pm »

El script recibe dos argumentos que son directorios. Si estos son correctos entonces tiene que ver que ficheros tiene uno que no tiene otro y mostrarlos diciendo este fichero está en tal directorio pero no en el otro. Para probar que funcionaba bien he intentado hacer la intersección de estos pero no funciona bien la comparación y creo que es por los espacios en los nombres de los ficheros.
En línea

hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Bash] Problema con array
« Respuesta #6 en: 20 Julio 2011, 12:06 pm »

Necesito saber como comparar dos nombres para ver cual es menor y cual mayor para así avanzar un array u otro pero tal y como lo tengo hecho parece que no funciona bien
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Bash] Problema con array
« Respuesta #7 en: 21 Julio 2011, 08:42 am »

Comparar nombres respecto a longitud o a lexicograficamente cuál es mayor?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Bash] Problema con array
« Respuesta #8 en: 21 Julio 2011, 10:15 am »

lexicográficamente. Ya lo he resuelto , he cambiado de orden los if y funciona y bueno lo he terminado
Código:
http://pastebin.com/SzvxLD2P
« Última modificación: 21 Julio 2011, 10:27 am por hervasiop12345 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con array... (Resuelto)
Programación C/C++
miketru 6 7,181 Último mensaje 9 Septiembre 2010, 01:35 am
por miketru
[Bash]Tratar variable vacía case [Resuelto]
Scripting
hervasiop12345 4 6,291 Último mensaje 8 Julio 2011, 17:45 pm
por hervasiop12345
Colores bash en python (RESUELTO)
Scripting
carlos.foroelhaker 2 3,197 Último mensaje 4 Mayo 2012, 19:41 pm
por carlos.foroelhaker
[RESUELTO] CopyMem Array VarTypes
Programación Visual Basic
Miseryk 7 5,212 Último mensaje 29 Junio 2013, 07:55 am
por Miseryk
Bash script: variable array
Scripting
Echizen 2 3,424 Último mensaje 12 Junio 2016, 03:56 am
por Echizen
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines