cp всегда копирует файл (ы) в начале команды в файл или каталог в конце команды. Косая черта не имеет большого значения для аргументов, если аргумент не является символической ссылкой на каталог. Тогда косая черта будет рассматривать его как каталог, в то время как косая черта копирует саму ссылку.
Предполагая, что вы хотите рекурсивно копировать любые подкаталоги в своих примерах, вы сделаете их так:
cp -r /home/src/somedir /dest
а также
cp -r /home/src/somedir/* /dest
Первый получает каталог /home/src/somedir и копирует этот аргумент, сам каталог и все его содержимое в последний аргумент /dest . При необходимости он создаст каталог somedir в /dest и будет использовать его, если он уже существует.
Второй добавляет * к концу первого аргумента, который будет расширяться оболочкой для каждого файла, с которого не начинается . в /home/src/somedir и скопирует все эти файлы и каталоги в /dest независимо от того, что там уже есть (за исключением того, что некоторые флаги для cp заставят перезаписать файлы, которые будут иметь то же значение в месте назначения, что и существующий файл).
Как отмечалось в комментариях к этому ответу, существуют проблемы с использованием * для захвата всех файлов в каталоге. Один из вариантов - использовать tar для копирования.
tar -c -C /home/src/somedir . | tar -x -C /dest
это создаст tar-файл somedir без начального пути, используя -C чтобы сначала переключиться на этот каталог. По умолчанию tar будет печатать в стандартный stdout который мы затем передадим по конвейеру другому tar чтобы извлечь его, переключаясь в нужный каталог /dest . Это также сохранит множество атрибутов файла, что может сделать и cp .