В основном вам нужно сделать следующее (если я правильно понял ваш вопрос):
ln -s /path/to/file /path/to/symlink
I am not sure how it works across different FS.
Сама операция переименования не работает в разных файловых системах; нет никакой разницы между записью в файл, скажем, из текстового редактора и записью в файл с помощью cp
с исходным файлом в другой файловой системе.
В Linux системный вызов rename
прозрачен для других ссылок на файл, включая другие жесткие ссылки и описания открытых файлов (и дескрипторы ). В справочной странице явно указано
Open file descriptors for oldpath are also unaffected.
(Я уточняю «в Linux» только потому, что не смог найти ссылку на POSIX; Я думаю, что это распространено в операционных системах стиля POSIX -.)
Таким образом, когда вы копируете файл между файловыми системами, cp
открывает источник для чтения, цель для записи и начинает копирование. Операции переименования не влияют на используемые файловые дескрипторы; вы можете переименовать источник и/или цель, не затрагивая cp
.
Другой способ думать об этом состоит в том, что имя файла в его содержащем каталоге является частью его записи каталога, которая указывает на его индекс;описания открытых файлов являются другими указателями на индексный дескриптор, как и другие жесткие ссылки. Изменение имени файла не влияет на другие существующие указатели.
Предостережения, на которые следует обратить внимание, заключаются в том, что такие инструменты, как mv
, не ограничивают себя тем, что может сделать системный вызов rename
; если вы mv
файлы в разных файловых системах, rename
завершится ошибкой (или mv
обнаружит, что операция выполняется в файловых системах, и даже не попытается ее выполнить ), а mv
затем прибегнуть к ручному копированию содержимого файла и удалению оригинала. Это не даст хороших результатов, если переименовываемый файл одновременно изменяется.