find -type f ! -name '*.c'
encontra todos os f ile cujo arquivo name é não ( ! ) terminando em .c .
Para garantir, use -ok em vez de -exec ou execute rm com a opção -i :
find -type f ! -name '*.c' -ok rm {} +
find -type f ! -name '*.c' -exec rm -i {} +
Se tiver certeza absoluta de que você pode excluir automaticamente todas as descobertas com -delete (sempre como a última opção!) em vez de chamar outro programa:
find -type f ! -name '*.c' -delete
Como sempre: Faça backup de seus dados e exclua com cuidado .