----- Mensaje original ----- > De: Julian Perconti <vh1...@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.sa...@gmail.com> >> Para: Julian Perconti <vh1...@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 >> <vh1...@yahoo.com.ar> escribió: >>> >>> >>> ----- Mensaje original ----- >>>> De: fernando sainz <fernandojose.sa...@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 >>>> <vh1...@yahoo.com.ar> escribió: >>>>> ----- Mensaje original ----- >>>>>> De: fernando sainz <fernandojose.sa...@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 >>>>>> <vh1...@yahoo.com.ar> escribió: >>>>>>> ----- Mensaje original ----- >>>>>>>> De: fernando sainz >> <fernandojose.sa...@gmail.com> >>>>>>>> Para: Julian Perconti > <vh1...@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 >>>>>>>> <vh1...@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-requ...@lists.debian.org >>>>>>>>> with a subject of "unsubscribe". >> Trouble? >>>> Contact >>>>>>>> listmas...@lists.debian.org >>>>>>>>> Archive: >>>>>>>> >>>>>> >>>> >> > http://lists.debian.org/1371739576.91232.yahoomail...@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-requ...@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact > listmas...@lists.debian.org > Archive: > http://lists.debian.org/1371751364.21858.yahoomail...@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! -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/1371752892.21142.yahoomail...@web160203.mail.bf1.yahoo.com