Каталог - це (концептуально) спеціальний "файл", який містить перелік імен та номери inode, на які вказують імена. Деякі назви можуть бути підкаталогами. Існує спеціальний запис, ..
який вказує на батьківський каталог.
Отже, зрозуміти, змінити ім'я файлу досить просто: ви просто змінюєте ім’я у записі каталогу, нічого іншого. Це означає, що файл є насправді файлом, або це "файл", який використовується для зберігання вмісту іншого каталогу. Дійсно, однакова rename
систематична дзвінка робить і те, і інше.
Однак копіювання - це набагато менш тривіальна операція. Ви можете просто скопіювати каталог «файл», але тоді ви мали б два каталоги, де файли однакові (вони були б жорсткими посиланнями). Якби у вас була система, яка дозволяє жорсткі посилання на каталоги, це було б до цього, але оскільки жодна сучасна система не дозволяє це, принаймні, не викорінювати, ви повинні робити цю копію для кожного підкаталогу. Ви можете фактично запитати cp
про таку поведінку за допомогою cp -lR
: -l
для жорсткого зв’язку, -R
для цієї рекурсії.
Але залишати все пов'язане - це, мабуть, не те, що ви хочете. Натомість ви хочете cp
скопіювати кожен файл. Це досить дорога операція: кожен файл повинен бути прочитаний в пам'яті та записаний на диск у другому місці. Насправді потрібно декілька системних викликів, щоб відкрити, прочитати, записати та закрити файли, і це потрібно повторити для кожного файлу.
Традиційні файлові системи працюють таким чином і на диску. Немає жодного способу скопіювати купу файлів, окрім як пройти кожен окремо та скопіювати його, і це типи файлових систем, які використовувались при розробці базових утиліт командного рядка.
mv
ІНГ з однієї файлової системи в іншу таку ж «просто змінити ім'я в записі каталогу»?