Концептуально он всегда использует OS API - вопрос только в том, каким образом. Есть по сути три варианта.
используя низкоуровневый OS API (системные вызовы) напрямую. В вашем примере задача довольно сложная: получите список элементов в папке, проверьте тип (папка, файл ...), для каждого из них создайте соответствующий элемент в целевой папке, для файлов прочитайте содержимое из исходный код, запись в целевой файл и т. д. Поскольку задача настолько сложна, легко что-то ошибиться, поэтому большинство приложений этого избегают.
использовать библиотеку (API), которая упрощает задачу. Например, инфраструктура Apple Cocoa предоставляет NSFileManagerкласс с copyItemAtPath:toPath:errorметодом, который выполняет всю грязную работу с использованием низкоуровневого API-интерфейса ОС, поэтому приложению не нужно использовать низкоуровневый API-интерфейс, а можно полагаться на то, что требует меньше работы и всегда присутствует в системе. Также Apple, вероятно, позаботится о том, чтобы все работало хорошо.
использовать внешний процесс для выполнения задачи. В этом случае внешний процесс будет использовать один из двух вышеуказанных методов для выполнения работы. Приложение должно запустить такой процесс, контролировать его и ждать, пока оно не будет сделано. Вполне вероятно, что такой процесс можно запустить как инструмент командной строки, так что это, вероятно, будет команда, которую вы можете запустить в Терминале. Это не гарантировано, но очень возможно.
В большинстве приложений используется вариант 2. потому что он более простой, чем 1. и более безопасный и эффективный, чем 3. Чтобы запустить внешний процесс, необходимо правильно его настроить, и вы не можете контролировать, что он делает. Например, гораздо сложнее выяснить, что именно пошло не так в случае сбоя, и трудно понять, что он делает (например, показать прогресс). Именно поэтому в большинстве случаев разработчики, скорее всего, выберут вариант 2, но гарантии нет. Ярким примером являются приложения, использующие сценарии оболочки для настройки, такие как установщики.
Расширенное примечание пользователя: вы можете использовать dtraceсредство OS X, чтобы узнать, что делает конкретное приложение. Например, вы можете проверить любые процессы, которые он порождает, чтобы увидеть инструменты, которые он использует (см. execsnoop).