fish é um dos poucos shells em que esse {} precisa ser citado .
Então, com esse shell, você precisa:
find . -type f -name '*.c' -exec chmod 644 '{}' +
Quando não é citado, {} se expande para um argumento vazio, então o comando se torna o mesmo que:
find . -type f -name '*.c' -exec chmod 644 '' +
E find reclama da falta de {} (ou ; como + é reconhecido apenas como o -exec terminator ao seguir {} ).
Com a maioria dos outros shells, você não precisa das aspas em torno de {} .


