Каталог (концептуально) - это специальный «файл», который содержит список имен и номера инодов, на которые указывают эти имена. Некоторые из имен могут быть подкаталогами. Существует специальная запись, ..которая указывает на родительский каталог.
Итак, все понятно, изменить имя файла очень просто: вы просто меняете имя в записи каталога, больше ничего. Это определяет, является ли файл фактически файлом или «файлом», используемым для хранения содержимого другого каталога. Действительно, один и тот же renameсистемный вызов делает оба.
Копирование, однако, является гораздо менее тривиальной операцией. Вы можете просто скопировать каталог «file», но тогда у вас будет две директории, в которых файлы одинаковы (это будут жесткие ссылки). Если бы у вас была система, которая допускает жесткие ссылки на каталоги, то так и было бы, но поскольку ни одна современная система не позволяет этого, по крайней мере, без полномочий root, вы должны сделать эту копию для каждого подкаталога. Вы можете запросить cpэто поведение с помощью cp -lR: -lдля жесткой ссылки, -Rдля этой рекурсии.
Но оставить все связанное, вероятно, не то, что вы хотите. Вместо этого вы хотите cpскопировать каждый файл. Это довольно дорогая операция: каждый файл должен быть прочитан в память и записан на диск во втором месте. На самом деле для открытия, чтения, записи и закрытия файлов требуется несколько системных вызовов, и это должно повторяться для каждого файла.
Традиционные файловые системы также работают на диске. Нет никакого способа скопировать кучу файлов, кроме как просмотреть каждый из них по отдельности и скопировать его, и это те типы файловых систем, которые использовались при разработке основных утилит командной строки.
mvпереход из одной файловой системы в другую "просто измените имя в записи каталога"?