За командой -exec может следовать любое количество аргументов, составляющих команду, которая должна выполняться для каждого найденного файла. Должен быть какой-то способ идентифицировать последний аргумент. Это то, что \; делает. Обратите внимание, что после ключа -exec могут последовать другие действия:
find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;
(Это находит все c-файлы и файлы python в каталоге euler.)
Причина, по которой exec не требует, чтобы полная команда находилась внутри кавычек, заключается в том, что в большинстве случаев для этого требуется экранирование большого количества кавычек внутри команды.