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

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: