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