Создать рекурсивную жесткую ссылку на всю папку

Создать рекурсивную жесткую ссылку на всю папку

Во-первых, я знаю, что нельзя создавать жесткие ссылки на папки.

Мне было интересно, есть ли какая-нибудь команда (Linux), которая могла бы автоматически (и рекурсивно) создать последующее дерево папок в месте назначения, а затем автоматически связать все файлы из источника с местом назначения.

решение1

Я не уверен, что вы имеете в виду под "затем автоматически связать все файлы из источника в место назначения". А вы явно хотите рекурсию.

Если вы хотите, чтобы два расположения оставались «синхронизированными», например, удаление или создание файла должно наблюдаться в обоих из них одновременно, то выполните привязку монтирования (этот другой ответ) хорошо. Обратите внимание, что решение не оставляет следов в файловой системе. Если вы создаете жесткую ссылку, она создается в файловой системе. Переместите диск и смонтируйте файловую систему в другой ОС, и жесткая ссылка все еще там. Перезагрузите, и жесткая ссылка все еще там. Связывание монтирования происходит на уровне ОС. Вам не только нужно будет отдельно отдать команду другой ОС связать монтирование после перемещения и монтирования диска. Если вы не перемещаете диск, вам все равно нужно будет сказать текущей ОС связать монтированиесновапосле перезагрузки (если вы хотите постоянного решения).

Символическая ссылка на каталог чем-то похожа и существует в файловой системе.

ln -s /original /other

Если символическая ссылка и ее цель принадлежат одной и той же файловой системе и символическая ссылкародственник, то это будет работать, даже если файловая система будет смонтирована в другом месте (другая точка монтирования, возможно, в другой ОС). Есть причины, по которым символическая ссылка может быть не тем, что вам нужно (пример).

Обратите внимание, что монтирование привязки или создание символических ссылок на самом деле не является рекурсивным. Этоодинокийдействие, которое "связывает" два пути. Оно ничего не делает с более глубокими путями. Их (полу)эквивалентность возникает, потому что есть некая связь между соответствующими ((((…)прапра-)прадедом)родительскими "каталогами".

Теперь, если под «автоматически выполнить жесткую ссылку на все файлы из источника в место назначения» вы подразумеваете «сделать это автоматически, но один раз», то вы можете сделать это с помощью cp:

cp -lR /original /other

( -lхотя POSIX не требует). Это похоже на , cp -Rно с жесткими ссылками. Это действительно рекурсивно. Но это также одноразовое действие. Поддеревья каталогов разделены, только обычные файлы появляются с жесткими ссылками. Создание или удаление файлов не будет зеркалироваться.Действия, которые нарушают жесткие ссылкисломает жесткие ссылки.

решение2

Будет липривязать креплениеможет быть лучшим решением? Он делает именно то, что вам нужно, а именно, чтобы все файлы были одинаковыми рекурсивно по двум разным путям.

Эта команда создает /otherто же содержимое, что и существующее монтирование или каталог /original:

mount --bind /original /other

Любые изменения, которые вы вносите в один из них /original, /otherнемедленно отображаются в другом, поскольку теперь оба пути указывают на одно и то же монтирование.

Связанный контент