Заметка
папки в одной файловой системе, которые были жестко связаны друг с другом
Обычно в Unix жесткие ссылки на каталоги вместе не поддерживаются. Я предполагаю, что вы имеете в виду "файлы в одном каталоге являются жесткими ссылками на файлы в другом каталоге".
поведение mv
Допустим, у вас есть много файлов, жестко связанных друг с другом, то есть множество путей, ведущих к одним и тем же данным, сохраненным один раз в файловой системе.
Сравните этот ответ Unix & Linux SE. Соответствующая часть:
Переход между файловыми системами (не имеет значения, находится ли он на одном физическом носителе или нет) обрабатывается как копия файла с последующим удалением. На самом деле это именно то, что делает команда mv
. Очевидно, это означает, что целевая файловая система должна создать новую копию файла.
После того, как копия сделана, mv
удаляет источник аналогично rm
. Это относится:
rm
просто удаляет указатель Если у вас есть несколько указателей на файл (жесткие ссылки), то удаление одного из этих указателей с помощью команды rm
оставляет другие нетронутыми, а данные остаются доступными.
Поэтому, если вы переместите несколько жестко связанных файлов в другую файловую систему, другие жесткие ссылки будут в безопасности. Жесткие ссылки не могут пересекать файловые системы, поэтому новая копия не может быть жесткой ссылкой на что-либо, что осталось в исходной файловой системе.
Если вы переместите все жестко связанные файлы, все они исчезнут из исходной файловой системы и появятся в целевой. Имейте в виду, что даже один mv
(перемещение нескольких файлов) будет создавать каждый новый файл отдельно, они больше не будут жестко связаны друг с другом. Теоретически mv
может выполнять дополнительную работу по обнаружению жестких ссылок и воссозданию их в целевой файловой системе, но это не так (как показано в этом другом ответе).
Перемещение жестких ссылок для получения жестких ссылок
Существуют и другие инструменты, воссоздающие жесткие ссылки, tar
является одним из них (хотя я не могу точно сказать, работает ли tar
в Mac OS X). Сравните это:
По умолчанию, если вы указываете tar
архивировать файл с жесткими ссылками, и среди архивируемых файлов включается более одной такой ссылки, он архивирует файл только один раз и записывает вторую (и любые дополнительные имена) как жесткие ссылки. , Это означает, что при извлечении этого архива жесткие ссылки будут восстановлены.
Обратите внимание, что жесткие ссылки будут восстановлены между восстановленными файлами (то есть они будут имитировать жесткие связи источника), но восстановленные файлы никогда не будут повторно жестко связаны с исходными файлами (или их жесткими ссылками, которые могут все еще существовать), даже если они Извлеченный в ту же файловую систему tar
получил их.
Чтобы использовать tar
без создания большого архива, вам нужно несколько трюков с оболочкой. Например:
tar -c /source/dirA/ /source/file1 | { cd /foo/destination/ && tar -x; }
Команда выполняет копирование без удаления. Если вам нужно удалить источник, сделайте это с помощью отдельной команды.