Solución 1:
Esto debería funcionar:
find /home/user -type d -print0 | xargs -0 chmod 0775
find /home/user -type f -print0 | xargs -0 chmod 0664
Solución 2:
find puede hacer el truco solo con -exec:
find /home/user -type f -exec chmod 0664 {} \;
find /home/user -type d -exec chmod 0775 {} \;
para evitar que find genere un chmod para cada entrada:
find /home/user -type f -exec chmod 0664 {} +
find /home/user -type d -exec chmod 0775 {} +
(esto llama efectivamente a chmod una vez con la lista de todos los archivos como parámetros en lugar de un chmod por archivo)
Solución 3:
Esta respuesta no resolverá su problema, pero alguien podría encontrarla útil para un problema similar donde los archivos tienen menos permisos de los que deberían.
# chmod -R . u=rwX,g=rX,o=rX
La magia es el permiso X, en lugar de x. La página de manual de chmod lo describe así:
ejecutar/buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario
Esto no es adecuado en su caso, ya que sus archivos tienen permiso de ejecución, por lo que coincidirá con la segunda prueba.