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: