Pregunta

necesito utilizar chmod para cambiar todos los archivos recursivamente a 664. Me gustaría pasar por alto carpetas. Yo estaba pensando en hacer algo como esto

ls -lR | grep ^-r | chmod 664

Esto no funciona, estoy asumiendo porque no puedo tubería en chmod Alguien sabe de una manera fácil de hacer esto?

Gracias

¿Fue útil?

Solución

Una respuesta find -exec es buena pero adolece del defecto suelen ser irrelevantes que crea un subproceso independiente para cada archivo. Sin embargo, es perfectamente funcional y sólo un mal rendimiento cuando el número de archivos se pone realmente grande. Usando xargs hará por lotes hasta los nombres de los archivos en grupos grandes antes de ejecutar un subproceso para que grupo de los archivos.

Sólo hay que tener cuidado de que, en el uso de xargs, manejar adecuadamente los nombres de archivo con espacios incrustados, los saltos de línea u otros caracteres especiales en ellos.

Una solución que resuelve ambos problemas es (suponiendo que tiene una suficiente find y xargs aplicación decente):

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

El -print0 causa find para terminar los nombres de archivo en su flujo de salida con un carácter NUL (en lugar de un espacio) y el -0 a xargs lo deja saber que debe esperar que a medida que el formato de entrada.

Otros consejos

Otra manera de hacer esto es utilizar find ... -exec ... de la 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 esto, y es superior siempre y cuando tenga una versión de find y xargs que pueden hacer frente a los "espacios en los nombres de ruta" problema; ver la respuesta aceptada.

Y para que conste, utilizando back-garrapatas se va a romper si hay demasiados archivos para tener permisos, o la longitud acumulada de las rutas de acceso es demasiado grande.

Mis sucintas dos centavos ...

Linux:

$ chmod 644 `find -type f`

OSX:

$ chmod 644 `find . -type f`

Esto funciona para cambiar de forma recursiva todos los archivos contenidos en el directorio actual y todos sus subdirectorios. Si desea dirigirse a un directorio diferente, . sustituto con la ruta correcta:

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

vía http: / /www.linuxquestions.org/questions/aix-43/chmod-recursion-files-only-208798/?s=a70210fb5e5d0aa7d3c69d8e8e64e3ed

  

"encontrar type f -print |. Xargs chmod 444" SHAUD funciona, ¿no es así?   Si no es así, encontrar. -print> myfile.sh   y vi myfile.sh eliminación de los directorios (que no debe ser taaan muchos), y luego   1, $ s / ^ / chmod 444 /   y sh myfile.sh.

con GNU encontrar

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top