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

Re: [OT] Sobre script bash (solucionado)



----- Mensaje original -----
> De: Julian Perconti <vh1988@yahoo.com.ar>
> Para: "debian-user-spanish@lists.debian.org" <debian-user-spanish@lists.debian.org>
> CC: 
> Enviado: jueves, 20 de junio de 2013 15:02
> Asunto: Re: [OT] Sobre script bash
> 
> ----- Mensaje original -----
>>  De: fernando sainz <fernandojose.sainz@gmail.com>
>>  Para: Julian Perconti <vh1988@yahoo.com.ar>
>>  CC: 
>>  Enviado: jueves, 20 de junio de 2013 14:15
>>  Asunto: Re: [OT] Sobre script bash
>> 
>>  El día 20 de junio de 2013 19:09, Julian Perconti
>>  <vh1988@yahoo.com.ar> escribió:
>>> 
>>> 
>>>   ----- Mensaje original -----
>>>>   De: fernando sainz <fernandojose.sainz@gmail.com>
>>>>   Para: "debian-user-spanish@lists.debian.org" 
>>  <debian-user-spanish@lists.debian.org>
>>>>   CC:
>>>>   Enviado: jueves, 20 de junio de 2013 13:26
>>>>   Asunto: Re: [OT] Sobre script bash
>>>> 
>>>>   El día 20 de junio de 2013 18:19, Julian Perconti
>>>>   <vh1988@yahoo.com.ar> escribió:
>>>>>    ----- Mensaje original -----
>>>>>>    De: fernando sainz <fernandojose.sainz@gmail.com>
>>>>>>    Para: "debian-user-spanish@lists.debian.org"
>>>>   <debian-user-spanish@lists.debian.org>
>>>>>>    CC:
>>>>>>    Enviado: jueves, 20 de junio de 2013 13:09
>>>>>>    Asunto: Re: [OT] Sobre script bash
>>>>>> 
>>>>>>    El día 20 de junio de 2013 17:55, Julian Perconti
>>>>>>    <vh1988@yahoo.com.ar> escribió:
>>>>>>>     ----- Mensaje original -----
>>>>>>>>     De: fernando sainz 
>>  <fernandojose.sainz@gmail.com>
>>>>>>>>     Para: Julian Perconti 
> <vh1988@yahoo.com.ar>
>>>>>>>>     CC:
>>>>>>>>     Enviado: jueves, 20 de junio de 2013 12:35
>>>>>>>>     Asunto: Re: [OT] Sobre script bash
>>>>>>>> 
>>>>>>>>     El día 20 de junio de 2013 16:46, Julian 
> Perconti
>>>>>>>>     <vh1988@yahoo.com.ar> escribió:
>>>>>>>>>      Saludos,
>>>>>>>>>      Tengo el siguiente script basico para 
> migrar 
>>  permisos:
>>>>>>>>>      # BOF
>>>>>>>>>      #!/bin/bash
>>>>>>>>>      j=0
>>>>>>>>>      echo "ID del GRUPO a buscar:"
>>>>>>>>>      read gida
>>>>>>>>>      echo "ID del GRUPO por el cual 
> reemplazar a 
>>  los que
>>>>>>>>>      se encuentren:"
>>>>>>>>>      read gidn
>>>>>>>>>      for i in `find $pwd -gid $gida -print0 | 
> xargs 
>>  -0 chgrp
>>>>>>>> 
>>>>>>>>     ¿Este salto de linea lo ha hecho el correo 
> supongo? 
>>  así
>>>>   estaría mal.
>>>>>>>> 
>>>>>>>>     veo algo extraño en el xargs, por defecto recibe 
> cada 
>>  valor
>>>>   devuelto
>>>>>>>>     por el find, no entiendo por que le pasas $i
>>>>>>>> 
>>>>>>>>     S2.
>>>>>>>> 
>>>>>>>>>      $gidn "$i"`; do
>>>>>>>>>              let j=j+1
>>>>>>>>>      done
>>>>>>>>>      echo $j 'reemplazos'
>>>>>>>>>      #EOF
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>>      En si el script, funciona bien, es decir, 
> los 
>>  permisos se
>>>>>>>>>      cambian según los id proporcionados; el 
> problema 
>>  es que
>>>>   me arroja
>>>>>>    el
>>>>>>>>     siguiente
>>>>>>>>>      error:
>>>>>>>>>      chgrp: cannot access `': No such file 
> or 
>>  directory
>>>>>>>>>      Y el contador me da siempre 0.
>>>>>>>>>      Probé de escribirlo de formas distintas, 
> por 
>>  ejemplo
>>>>>>>>>      meter la salida en un tmp y luego cat tmp, 
> etc..
>>>>>>>>>      Alguna idea?
>>>>>>>>>      Aclaro que no soy programador ni mucho 
> menos, 
>>  asique toda
>>>>>>>>>      sugerencia/critica/mejora es bienvenida!
>>>>>>>>>      Gracias de antemano!
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>      --
>>>>>>>>>      To UNSUBSCRIBE, email to
>>>>>>    debian-user-spanish-REQUEST@lists.debian.org
>>>>>>>>>      with a subject of "unsubscribe". 
>>  Trouble?
>>>>   Contact
>>>>>>>>    listmaster@lists.debian.org
>>>>>>>>>      Archive:
>>>>>>>> 
>>>>>> 
>>>> 
>> 
> [🔎] 1371739576.91232.YahooMailNeo@web160205.mail.bf1.yahoo.com">http://lists.debian.org/[🔎] 1371739576.91232.YahooMailNeo@web160205.mail.bf1.yahoo.com
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>>     Respondo a la lista:
>>>>>>> 
>>>>>>>     Bueno efectivamente le saque "$i" y el 
> error 
>>  desapareció
>>>>   pero
>>>>>>    sigue apareciendo otro:
>>>>>>> 
>>>>>>>     chgrp: cannot dereference
>>>>>>    `./.pulse/0494f201138428357ab0646c51ada1e2-runtime': 
> No 
>>  such file
>>>>   or
>>>>>>    directory
>>>>>>> 
>>>>>>>     Y la salida de sh -x: (antes de quitarle $i)
>>>>>>> 
>>>>>>>    root@debian:/home/julian# sh -x migraperm
>>>>>>>     + j=0
>>>>>>>     + echo ID del GRUPO a buscar:
>>>>>>>     ID del GRUPO a buscar:
>>>>>>>     + read gida
>>>>>>>     1000
>>>>>>>     + echo ID del GRUPO por el cual reemplazar a los que 
> se
>>>>   encuentren:
>>>>>>>     ID del GRUPO por el cual reemplazar a los que se 
>>  encuentren:
>>>>>>>     + read gidn
>>>>>>>     0
>>>>>>>     + find -gid 1000 -print0
>>>>>>>     + xargs -0 chgrp 0
>>>>>>>     chgrp: cannot access `': No such file or 
> directory
>>>>>>>     chgrp: cannot dereference
>>>>>>    `./.pulse/0494f201138428357ab0646c51ada1e2-runtime': 
> No 
>>  such file
>>>>   or
>>>>>>    directory
>>>>>>>     + echo 0 reemplazos
>>>>>>>     0 reemplazos
>>>>>>> 
>>>>>>>     Sin embargo algo esta mal hecho y no me doy cuenta 
> porque 
>>  el
>>>>   contador sigue
>>>>>>    dando 0:
>>>>>>> 
>>>>>>>    root@debian:/home/julian# ./migraperm
>>>>>>>     ID del GRUPO a buscar:
>>>>>>>     0
>>>>>>>     ID del GRUPO por el cual reemplazar a los que se 
>>  encuentren:
>>>>>>>     1000
>>>>>>>     0 reemplazos
>>>>>>> 
>>>>>>>     El script quedó asi:
>>>>>>> 
>>>>>>>     #!/bin/bash
>>>>>>>     j=0
>>>>>>>     echo "ID del GRUPO a buscar:"
>>>>>>>     read gida
>>>>>>>     echo "ID del GRUPO por el cual reemplazar a los 
> que 
>>  se
>>>>>>    encuentren:"
>>>>>>>     read gidn
>>>>>>> 
>>>>>>>     for i in `find $pwd -gid $gida -print0 | xargs -0 
> chgrp 
>>  $gidn`;
>>>>>>>     do
>>>>>>>             let j=j+1
>>>>>>>     done
>>>>>>>     echo $j 'reemplazos'
>>>>>>> 
>>>>>>>     Muchas gracias por sus prontas respuestas!
>>>>>>> 
>>>>>> 
>>>>>>    Creo que es un error de concepto.
>>>>>>    la salida del `find.....| xargs ...` va a estar vacía. 
> Prueba 
>>  a
>>>>   ejecutarlo solo.
>>>>> 
>>>>>    Es verdad Fernando, me estaba empezando a dar cuenta, 
>>  aparentemente el let
>>>>   no se esta ejecutando porque el contador es 0 (creo que es eso)
>>>>> 
>>>>>    La salida de ejecutarlo solo devuelvo solo una línea de error 
> de 
>>  no 'No
>>>>   such file or directory'.
>>>>> 
>>>>>    Voy a buscar la forma de contar los elemento separadamente; 
> de 
>>  todas formas
>>>>   no es algo critico (el script ya cumple su función), solo me 
> entusiasme 
>>  un poco
>>>>   y quería imprimir en pantalla la cantidad de elementos modifiados.
>>>>> 
>>>>>> 
>>>>>>    S2.
>>>>> 
>>>>>    Saludos!
>>>>> 
>>>> 
>>>> 
>>>>   Tu problema es que mezclas dos cosas, si se usa un pipe con xargs 
> es
>>>>   precisamente para evitar el bucle for.
>>> 
>>>   No se muy entendido del tema, pero yo xargs (buscando en google) lo 
> use por 
>>  el tema de los archivos que contienen espacios. Este script lo estoy 
> corriendo 
>>  en un entorno de prueba donde casualemente no hay archios con espacios.
>>> 
>>>> 
>>>>   Si usas el bucle for, quita el xargs y pon el chgp en el cuerpo 
> del 
>>  for.
>>>>   S2.
>>> 
>>>   Y el los ficheros con espacios como los manipulo?
>>> 
>>>   Saludos!
>> 
>>  Poniendo la variable entre comillas, no recuerdo si dobles o
>>  sencillas, o las dos valen: chgrp "$a" "$i"
>> 
>>  S2.
>> 
>  
> Gracias Camaleón y Fernando.
>  
> Si no hice algo mal, creo que no funciona:
>  
> ID del GRUPO a buscar:
> 0
> ID del GRUPO por el cual reemplazar a los que se encuentren:
> 1000
> chgrp: cannot access `./prueba': No such file or directory
> chgrp: cannot access `espacio': No such file or directory
> chgrp: cannot access `./Desktop/Untitled': No such file or directory
> chgrp: cannot access `Document~': No such file or directory
> chgrp: cannot access `./espacio': No such file or directory
> chgrp: cannot access `o': No such file or directory
> chgrp: cannot access `o': No such file or directory
> 222 reemplazos
> 
> ls -l  ./
>  
> (...)
>  
> -rw-r--r-- 1 root   root      0 Jun 20 10:47 espacio o o
> -rw-r--r-- 1 root   root      0 Jun 20 10:29 prueba espacio
> 
> El script quedo así:
>  
> #!/bin/bash
> j=0
> echo "ID del GRUPO a buscar:"
> read gida
> echo "ID del GRUPO por el cual reemplazar a los que se encuentren:"
> read gidn
> for i in `find $pwd -type f -gid $gida`;
> do
>         chgrp "$gidn" "$i"
>         let j=j+1
> done
> echo $j 'reemplazos'
>  
> También probé con chgrp $gidn "$i", es decir sin encerrar con comillas 
> a la variable 'gidn' y tambien $i encerrado con comillas simples.
>  
> Que puede ser?
> 
> 
> --
> To UNSUBSCRIBE, email to debian-user-spanish-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact 
> listmaster@lists.debian.org
> Archive: 
> [🔎] 1371751364.21858.YahooMailNeo@web160206.mail.bf1.yahoo.com">http://lists.debian.org/[🔎] 1371751364.21858.YahooMailNeo@web160206.mail.bf1.yahoo.com
> 
 
Saludos, leyendo un poco mas al respecto encontré una entrada que me resolvió el asunto, les dejo el script final:
 
#BOF
 
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
j=0
echo "ID del GRUPO a buscar:"
read gida
echo "ID del GRUPO por el cual reemplazar a los que se encuentren:"
read gidn

for i in `find $pwd -gid $gida` ;
do
        chgrp $gidn "$i"
        let j=j+1
done
echo $j 'reemplazos'
IFS=$SAVEIFS
 
#EOF
 
Gracias Fernando y Camaleón por la ayuda!
 
Hasta la próxima!


Reply to: