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.
"find. -type f -print | xargs chmod 444" debería funcionar, ¿no? Si no, encuentra. -print> myfile.sh y vi myfile.sh eliminando los directorios (no deberían ser tantos), y luego 1, $ s / ^ / chmod 444 / y sh miarchivo.sh.
con GNU encontrar
find /path -type f -exec chmod 644 {} +;