0
Cambio permiso y grupos

Solved 3 Respuestas 1 Views
Buenas, tengo un problema con los permisos de unos fotos, los cuales se pueden cambiar por otros cuando los administradores de un panel lo deseen, son fotos de productos y cada tanto las renuevan.

El problema que son muchos, arriba de 40.000, y desde que el sistema se mudó de servidor esos archivos tienen permiso de escritura solo para root, (-rw-r--r-- ) y los nuevos que van subiendo, para el usuario www que es el que tiene los permisos de apache.  Ahora bien lo que necesito es cambiar los permisos de los archivos viejos para que si lo desean re escribir, se pueda.  

 No soy experto en linux, cabe aclarar, pero me imaginé que si podía hacía chmod g+w * se solucionaría el problema, pero me tira este error :  bash: /bin/chmod: La lista de argumentos es demasiado larga .  Me imagino que es por la cantidad de archivos.

Hay forma de acotar la lista de los archivos a cambiar los permisos?

Lo  que se me había ocurrido es con el comando find poner los de una fecha concreta, que son los que tienen mal los permisos, pero no termino de encontrar la forma para que funcione.

Muchas Gracias!

3 Respuestas

0
Mejor respuesta

La simple que podés hacer es un for:

for F in $(ls); do chmod g+w $F ; done

Así lo hace uno por uno. Claramente si tenés 40k archivos, capaz tarda un toque.

respondido por nicovillanueva (600 puntos) Nov 15, 2016
2Comentarios
comentado por PaliSick (120 puntos) Nov 15, 2016
Mil gracias, lo hice así, tardó un ratito, aproximadamente unos 8min pero no superó el 55% del uso del cpu, lo mejor de todo es que la web estuvo operativa y no creo que hayan notado mucha diferencia.
comentado por whoan (110 puntos) Nov 17, 2016
Estimados, soy nuevo en el portal y todavía no conozco las reglas del sitio. ¿Una vez resuelta una pregunta no se pueden añadir más respuestas? Quería comentar que conviene tratar de evitar el uso de la salida de `ls` ya que no funciona bien, por ejemplo, con archivos con espacios en sus nombres. En este caso en particular, usar * a secas (Pathname Expansion) que va a funcionar mejor.
0
Tenes muchas maneras de pensarlo, una puede ser con el find con algo asi:

find /directorio -mtime +10 -exec chmod g+w {} \;

donde el mtime quiere decir los archivos que se modificaron hace mas de 10 dias.

Otra puede ser algo asi:

for i in `ls -tr /directorio | tail -100`; do chmod g+w $i;done

en este caso tenes que ajustar a mano el valor 100 para cambiar los permisos desde donde te interese.

Saludos
respondido por luigibalzani (9,730 puntos) Nov 15, 2016
1
también podés usar la opción -R:

 

chmod -R g+w directorio

 

te cambia todos los permisos de todos lo que hay en el directorio, y de ahí para abajo
respondido por Tarkianbye Nov 15, 2016
...