Soluzione 1:
Questo dovrebbe risolvere il problema:
find /home/user -type d -print0 | xargs -0 chmod 0775
find /home/user -type f -print0 | xargs -0 chmod 0664
Soluzione 2:
find può fare il trucco da solo con -exec:
find /home/user -type f -exec chmod 0664 {} \;
find /home/user -type d -exec chmod 0775 {} \;
per impedire a find di generare un chmod per ogni voce:
find /home/user -type f -exec chmod 0664 {} +
find /home/user -type d -exec chmod 0775 {} +
(questo chiama effettivamente chmod una volta con l'elenco di tutti i file come parametri anziché un chmod per file)
Soluzione 3:
Questa risposta non risolverà il tuo problema, ma qualcuno potrebbe trovarla utile per un problema simile in cui i file hanno meno autorizzazioni di quanto dovrebbero.
# chmod -R . u=rwX,g=rX,o=rX
La magia è il permesso X, piuttosto che x. La manpage chmod lo descrive così:
esegui/cerca solo se il file è una directory o ha già il permesso di esecuzione per qualche utente
Questo non è adatto nel tuo caso in quanto i tuoi file hanno il permesso di esecuzione, quindi corrisponderà al secondo test.