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?
Reply to: