usuario usa una todos siguientes propiedad permisos para los ejemplos dar cuál comandos carpetas carpeta cambiar archivos archivo unix grep chmod

unix - usa - permisos linux 777



cambiando chmod para archivos pero no directorios (5)

Mis sucintos dos centavos ...

Linux:

$ chmod 644 `find -type f`

OSX:

$ chmod 644 `find . -type f`

Esto funciona para cambiar recursivamente todos los archivos contenidos en el directorio actual y todos sus subdirectorios. Si quieres apuntar a un directorio diferente, sustituye . con la ruta correcta:

$ chmod 644 `find /home/my/special/folder -type f`

Necesito usar chmod para cambiar todos los archivos recursivamente a 664. Me gustaría omitir las carpetas. Estaba pensando en hacer algo como esto

ls -lR | grep ^-r | chmod 664

Esto no funciona, lo asumo porque no puedo conectarme a Chmod. ¿Alguien sabe de una manera fácil de hacer esto?

Gracias


Otra forma de hacerlo es usar find ... -exec ... siguiente manera:

find . -type f -exec chmod 644 {} /;

El problema es que el -exec inicia un proceso chmod para cada archivo. El enfoque xargs evita, y es superior siempre que tenga una versión de find y xargs que pueda hacer frente al problema de "espacios en rutas"; ver la respuesta aceptada

Y para que conste, el uso de back-ticks se va a romper si hay demasiados archivos para ser considerados, o la longitud agregada de los nombres de las rutas es demasiado grande.


Una respuesta find -exec es buena pero adolece de la deficiencia generalmente irrelevante que crea un subproceso separado para cada archivo. Sin embargo, es perfectamente funcional y solo funcionará mal cuando la cantidad de archivos sea realmente grande. El uso de xargs los nombres de los archivos en grupos grandes antes de ejecutar un subproceso para ese grupo de archivos.

Solo debe tener cuidado de que, al usar xargs , maneje adecuadamente los nombres de archivo con espacios incrustados, líneas nuevas u otros caracteres especiales en ellos.

Una solución que resuelve estos dos problemas es (suponiendo que tenga una implementación de find y xargs suficientemente decente):

find . -type f -print0 | xargs -0 chmod 644

El -print0 hace que el resultado finalice los nombres de archivo en su flujo de salida con un carácter NUL (en lugar de un espacio) y el -0 a xargs permite saber que debe esperar eso como formato de entrada.



con GNU encontrar

find /path -type f -exec chmod 644 {} +;